私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレMySQL 総合 Part12

みんなの評価 : ○
レスフィルター : (試験中)
>>199
ありがとうございます。
現在レプリケーションの設定ですが、いろいろつまずいています。
MyISAMの小さなデータベースで練習をしているのですが、
この場合も「バイナリログ」を使った更新になるのでしょうか?
MyISAM用の単純な方式(クエリのテキスト文をスレーブに投げる等)なものがあるのでしょうか?
あと、レプリケーションのタイミングは、
update、delete等、データベースが変わる瞬間にレプリケーションをするのでしょうか?
タイマーのようなもので、一定間隔で変わるのでしょうか?
ありがとうございます。
現在レプリケーションの設定ですが、いろいろつまずいています。
MyISAMの小さなデータベースで練習をしているのですが、
この場合も「バイナリログ」を使った更新になるのでしょうか?
MyISAM用の単純な方式(クエリのテキスト文をスレーブに投げる等)なものがあるのでしょうか?
あと、レプリケーションのタイミングは、
update、delete等、データベースが変わる瞬間にレプリケーションをするのでしょうか?
タイマーのようなもので、一定間隔で変わるのでしょうか?
半角カタカナ、全角半角英字、などみなさんはどのように対処されていますか?
入力時に全部統一させる、清音化した列を新たに設ける、その都度関数を用いて変換比較する
結構悩ましい問題だと思うのですが・・・
入力時に全部統一させる、清音化した列を新たに設ける、その都度関数を用いて変換比較する
結構悩ましい問題だと思うのですが・・・
うちでは
入力されたデータの中の
半角カタカナは勝手に全角カタカナに変換
全角英数字は勝手に半角英数字に変換
するプログラムを経由してから
SQL薄幸してます
入力されたデータの中の
半角カタカナは勝手に全角カタカナに変換
全角英数字は勝手に半角英数字に変換
するプログラムを経由してから
SQL薄幸してます
>>209に幸多かれ
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_32 をみて、
/etc/my.conf の [mysqld] のブロックに
init-connect='SET AUTOCOMMIT=0'
を追加しました。
grant 文でスーパーユーザじゃないユーザをつくって mysql コマンドで接続したところ、
Auto Commit が 0 になっていました。
でもこれだとスーパーユーザが接続した場合は、Auto Commit = 1 のままですが、
これはしょうがないのでしょうか?
/etc/my.conf の [mysqld] のブロックに
init-connect='SET AUTOCOMMIT=0'
を追加しました。
grant 文でスーパーユーザじゃないユーザをつくって mysql コマンドで接続したところ、
Auto Commit が 0 になっていました。
でもこれだとスーパーユーザが接続した場合は、Auto Commit = 1 のままですが、
これはしょうがないのでしょうか?
排他制御について質問させてください。
以下のようなtable Aがあったとします。
----------------------------------
id | data
----------------------------------
1 | aaa
2 | bbb
3 | ccc
この状態で、データをinsertする場合、
以下のようにidのmax値を取得して、
select max(id) from A;
max値に+1をして、insertという流れになるとします。
複数のプログラムがこのテーブルにデータをinsertする可能性がある場合、
テーブル毎ロックする必要があるでしょうか?
#auto incrementはコーディング規約で使わない方針となっています(T_T
以下のようなtable Aがあったとします。
----------------------------------
id | data
----------------------------------
1 | aaa
2 | bbb
3 | ccc
この状態で、データをinsertする場合、
以下のようにidのmax値を取得して、
select max(id) from A;
max値に+1をして、insertという流れになるとします。
複数のプログラムがこのテーブルにデータをinsertする可能性がある場合、
テーブル毎ロックする必要があるでしょうか?
#auto incrementはコーディング規約で使わない方針となっています(T_T
質問させて下さい。
WindowsXP SP2 にてMySQL 5.0.43をメモリ2G搭載して使っています。
1:my.cnf の設定を変更し再起動をかけたのですが一部設定通りに反映されていない部分がある。
2:設定値についての疑問
1については 下記以下一部抜粋 のように設定してあります。
skip-locking
key_buffer=1024M
table_cache=1024
max_allowed_packet=4M
sort_buffer_size=2M
read_buffer_size=4M
SHOW VARIABLES; を打つと、table_cache 763 と表示され、設定した1024ではありません。
また、SET GLOBAL table_cache=数値; を実行するときちんと設定値になります。
設定ファイル通り読み込ませたいのです。
2については設定値の~Mや~Kはわかるのですが、単位のついていないもの、例えばtable_cache等はバイトと考えればよいのでしょうか?
だとすればグローバルキャッシュなのにもかかわらずあまりに使用メモリ量が少ないんじゃないかと思っています。
最後に、現在メモリを多く使用するよう設定してMySQLの挙動テストをしているのですが、どれだけメモリを大きく設定しても
key_buffer以外の設定だとメモリ利用料が5Mもあがりません。
SHOW VARIABLES;では殆どの値がきちんと設定値になっていますが、本当にメモリを使用しているのか少々不安です。
また、設定値自体の項目についてはいろいろなサイトで見かけますが、設定についてもう一歩踏み込んだ、
挙動を想像・把握できるような解説がなされているサイト等はありませんでしょうか?
MySQLドキュメント当を見ながらやってきたのですが行き詰ってしまいました。
よろしくお願いします。
WindowsXP SP2 にてMySQL 5.0.43をメモリ2G搭載して使っています。
1:my.cnf の設定を変更し再起動をかけたのですが一部設定通りに反映されていない部分がある。
2:設定値についての疑問
1については 下記以下一部抜粋 のように設定してあります。
skip-locking
key_buffer=1024M
table_cache=1024
max_allowed_packet=4M
sort_buffer_size=2M
read_buffer_size=4M
SHOW VARIABLES; を打つと、table_cache 763 と表示され、設定した1024ではありません。
また、SET GLOBAL table_cache=数値; を実行するときちんと設定値になります。
設定ファイル通り読み込ませたいのです。
2については設定値の~Mや~Kはわかるのですが、単位のついていないもの、例えばtable_cache等はバイトと考えればよいのでしょうか?
だとすればグローバルキャッシュなのにもかかわらずあまりに使用メモリ量が少ないんじゃないかと思っています。
最後に、現在メモリを多く使用するよう設定してMySQLの挙動テストをしているのですが、どれだけメモリを大きく設定しても
key_buffer以外の設定だとメモリ利用料が5Mもあがりません。
SHOW VARIABLES;では殆どの値がきちんと設定値になっていますが、本当にメモリを使用しているのか少々不安です。
また、設定値自体の項目についてはいろいろなサイトで見かけますが、設定についてもう一歩踏み込んだ、
挙動を想像・把握できるような解説がなされているサイト等はありませんでしょうか?
MySQLドキュメント当を見ながらやってきたのですが行き詰ってしまいました。
よろしくお願いします。
1.
table_cache=700
と書くとどうなる?
OSレベルの制限値を見てmysqldが勝手に値を絞っているのかもしれない。
2.
table_cacheはハンドラというテーブルを管理する内部構造の「数」を示す。
サーバへの同時接続数が100あって、それらが平均的に
テーブル3つにアクセスするSQLを実行するなら、table_cacheは300以上にする。
sort_buffer、read_bufferは
それが必要となるようなSQLを実行しないと確保されない。
> 設定についてもう一歩踏み込んだ、
> 挙動を想像・把握できるような解説がなされているサイト
英語を苦にしないならこのへん。
http://forge.mysql.com/wiki/MySQL_Internals
書籍ならこのへん。バージョン3.xや4.xの本を買わないように注意!
・現場で使える MySQL
・MySQL 辞典
残念ながら、最終的にはソース嫁としか言えない。
table_cache=700
と書くとどうなる?
OSレベルの制限値を見てmysqldが勝手に値を絞っているのかもしれない。
2.
table_cacheはハンドラというテーブルを管理する内部構造の「数」を示す。
サーバへの同時接続数が100あって、それらが平均的に
テーブル3つにアクセスするSQLを実行するなら、table_cacheは300以上にする。
sort_buffer、read_bufferは
それが必要となるようなSQLを実行しないと確保されない。
> 設定についてもう一歩踏み込んだ、
> 挙動を想像・把握できるような解説がなされているサイト
英語を苦にしないならこのへん。
http://forge.mysql.com/wiki/MySQL_Internals
書籍ならこのへん。バージョン3.xや4.xの本を買わないように注意!
・現場で使える MySQL
・MySQL 辞典
残念ながら、最終的にはソース嫁としか言えない。
UTF8のテーブルを使って文書を(主に)LIKE検索するプログラムを作っています。
ひらがなとカタカナを吸収してもらえるので重宝している反面、
一方のみの結果だけでじゅうぶん、ということも多いです。
例えば人名で「アリス」と入力したとき、「~ありすぎて」までヒットしてしまうから・・
これをSQL文など外部から制御する方法はあるでしょうか?
MySQLは4.1です。
ひらがなとカタカナを吸収してもらえるので重宝している反面、
一方のみの結果だけでじゅうぶん、ということも多いです。
例えば人名で「アリス」と入力したとき、「~ありすぎて」までヒットしてしまうから・・
これをSQL文など外部から制御する方法はあるでしょうか?
MySQLは4.1です。
MySQL5で
id = PK
name = UNIQUE
というカラムのある果物テーブルがあるとして
REPLACE INTO 果物 SET name = りんご
を一回やると
id 1 name りんご
というレコードができるのですが、
REPLACE INTO 果物 SET name = りんご
もう一度やると
id 2 name りんご
とういうレコードができます。
これを、
id 1 name りんご
にするにはどうしたらいいですか?
id = PK
name = UNIQUE
というカラムのある果物テーブルがあるとして
REPLACE INTO 果物 SET name = りんご
を一回やると
id 1 name りんご
というレコードができるのですが、
REPLACE INTO 果物 SET name = りんご
もう一度やると
id 2 name りんご
とういうレコードができます。
これを、
id 1 name りんご
にするにはどうしたらいいですか?
REPLACE は INSERT とほぼ同じように動作しますが、唯一異なる点として
UNIQUE インデックスまたは PRIMARY KEY に関して新しいレコードと同じ値が
テーブル内の以前のレコードに含まれていると、以前のレコードが削除されてから
新しいレコードが挿入されます。
UNIQUE インデックスまたは PRIMARY KEY に関して新しいレコードと同じ値が
テーブル内の以前のレコードに含まれていると、以前のレコードが削除されてから
新しいレコードが挿入されます。
教えてください。
テーブルにPK1、PK2、PK3という3つのPKと4つ目のフィールドFLD4があり、
PK1、PK3、FLD4の3つで構成されたインデックスIDX1があります。
select
PK1, Max(FLD4)
From hoge
Where PK3='hogehoge'
Group By PK1
というSQLをexplainで調査すると
Using where; Using index; Using temporary; Using filesort
が現れます。
このテーブルには2000万件のレコードがあるのですが、
Using temporary; Using filesortが現れるのはレコード数のせいでしょうか?
テーブルにPK1、PK2、PK3という3つのPKと4つ目のフィールドFLD4があり、
PK1、PK3、FLD4の3つで構成されたインデックスIDX1があります。
select
PK1, Max(FLD4)
From hoge
Where PK3='hogehoge'
Group By PK1
というSQLをexplainで調査すると
Using where; Using index; Using temporary; Using filesort
が現れます。
このテーブルには2000万件のレコードがあるのですが、
Using temporary; Using filesortが現れるのはレコード数のせいでしょうか?
ありがとうございます。
デフォルトはNULLになるけど?
mysql> create table test (c1 int primary key, c2 int);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into test(c1) values (1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+----+------+
| c1 | c2 |
+----+------+
| 1 | NULL |
+----+------+
1 row in set (0.00 sec)
mysql> create table test (c1 int primary key, c2 int);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into test(c1) values (1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+----+------+
| c1 | c2 |
+----+------+
| 1 | NULL |
+----+------+
1 row in set (0.00 sec)
すみません、もう一つ自己レスです。
phpMyAdminはPHPなわけですが、その他のPHPのプログラムでも
mysql> insert into test(c1,c2) values (1,'');
では駄目なんですね。空であっても''があると、
そのフィールドには0が入ってしまうみたいです。
phpMyAdminはPHPなわけですが、その他のPHPのプログラムでも
mysql> insert into test(c1,c2) values (1,'');
では駄目なんですね。空であっても''があると、
そのフィールドには0が入ってしまうみたいです。
>>235
遅レスすみません。
分かち書きは考えてみたのですが、そうすると複合語にマッチしづらくなりませんか?
ユーザー入力も同じ仕組みで分かち書きすればいいのかもしれないんですが
文書中、わりと崩した日本語も多いことから難しそうです。
Sennaや標準のFULLTEXTは使える環境になくて・・・
SET文などでスイッチできそうな気もするんですがどうも情報見つかりません。
遅レスすみません。
分かち書きは考えてみたのですが、そうすると複合語にマッチしづらくなりませんか?
ユーザー入力も同じ仕組みで分かち書きすればいいのかもしれないんですが
文書中、わりと崩した日本語も多いことから難しそうです。
Sennaや標準のFULLTEXTは使える環境になくて・・・
SET文などでスイッチできそうな気もするんですがどうも情報見つかりません。
>>243
切り替えはCOLLATEで可能なんだけど、あなたの望むようなモノが用意されてるかは調べてません。
まあこのへんを読んでちょ。
http://dev.mysql.com/doc/refman/5.1/ja/charset-mysql.html
http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html
切り替えはCOLLATEで可能なんだけど、あなたの望むようなモノが用意されてるかは調べてません。
まあこのへんを読んでちょ。
http://dev.mysql.com/doc/refman/5.1/ja/charset-mysql.html
http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html
>>229
フルテキストは分かち書きして保存する。
入力文字ももちろん分かち書きする。
で、入力文字を分かち書きした区切り分クエリする。
そのとき前後の区切りも検索の対象にするのがポイント。
だけど決してパフォーマンスは出ないのでデータ数によっては注意しる。
フルテキストは分かち書きして保存する。
入力文字ももちろん分かち書きする。
で、入力文字を分かち書きした区切り分クエリする。
そのとき前後の区切りも検索の対象にするのがポイント。
だけど決してパフォーマンスは出ないのでデータ数によっては注意しる。
>>245-246
ありがとうございます。
テーブルのcollationはutf8_unicode_ciにしています。
COLLATEはまったく知らなかったので、昨夜>>245を見て確認してみました。
テーブル作成時にutf8_unicode_ciを指定したことをあまり意識していなくて
>>229に書かなかったのがよくなかったですm(_ _)m
utf8_unicode_ciのテーブルに対するSELECT文にCOLLATEを入れることで、
ひらがな、カタカナが分けて検索されるのを確認できました。
SELECT * FROM table_name
WHERE column_name COLLATE utf8_general_ci
LIKE '%foo%' ORDER BY ・・・(続く)
検索フォームでオプションとして切り替えたりすれば便利だなと
喜んでいたんですが、その後の挙動がちょっとおかしいみたいで・・・
次の検索でCOLLATE~を指定しない検索をした場合でも
utf8_unicode_ciの検索に戻らないみたいだったんです。
テーブルのステータスを確認しても、ちゃんとutf8_unicode_ciなんですが・・
多分、上記の挙動はなにか別の理由というか勘違いっぽい気もしてるので
今夜さらに確認してからお返事をと思っていたんですが
>>246でちょうど指摘をいただいたので取り急ぎ書き込みました。
たいへん参考になりますm(_ _)m
ありがとうございます。
テーブルのcollationはutf8_unicode_ciにしています。
COLLATEはまったく知らなかったので、昨夜>>245を見て確認してみました。
テーブル作成時にutf8_unicode_ciを指定したことをあまり意識していなくて
>>229に書かなかったのがよくなかったですm(_ _)m
utf8_unicode_ciのテーブルに対するSELECT文にCOLLATEを入れることで、
ひらがな、カタカナが分けて検索されるのを確認できました。
SELECT * FROM table_name
WHERE column_name COLLATE utf8_general_ci
LIKE '%foo%' ORDER BY ・・・(続く)
検索フォームでオプションとして切り替えたりすれば便利だなと
喜んでいたんですが、その後の挙動がちょっとおかしいみたいで・・・
次の検索でCOLLATE~を指定しない検索をした場合でも
utf8_unicode_ciの検索に戻らないみたいだったんです。
テーブルのステータスを確認しても、ちゃんとutf8_unicode_ciなんですが・・
多分、上記の挙動はなにか別の理由というか勘違いっぽい気もしてるので
今夜さらに確認してからお返事をと思っていたんですが
>>246でちょうど指摘をいただいたので取り急ぎ書き込みました。
たいへん参考になりますm(_ _)m
先ほど確認できました。
>>247のSQL文で問題なくスイッチできました。
動作がうまくいかなかった部分については、やはり別の理由からで
検索を試した何パターンかの自作スクリプトのうちのひとつに原因があったものでした。
そのときは突っ込まずにすぐ寝てしまったので・・すみません。
いただいた回答、たいへん参考になりました。ありがとうございましたm(_ _)m
>>247のSQL文で問題なくスイッチできました。
動作がうまくいかなかった部分については、やはり別の理由からで
検索を試した何パターンかの自作スクリプトのうちのひとつに原因があったものでした。
そのときは突っ込まずにすぐ寝てしまったので・・すみません。
いただいた回答、たいへん参考になりました。ありがとうございましたm(_ _)m
limit句についてご質問があります。
あるテーブルにn件のデータがあるとして、
limit 3,n
のようなことをしたいのですが、どのようにすればよろしいでしょうか?
limitでなくても構わないのですが、、よろしくお願い致します。
あるテーブルにn件のデータがあるとして、
limit 3,n
のようなことをしたいのですが、どのようにすればよろしいでしょうか?
limitでなくても構わないのですが、、よろしくお願い致します。



類似してるかもしれないスレッド
- MySQL 総合 Part13 (996) - [94%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part19 (982) - [94%] - 2011/6/9 2:33
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part15 (1001) - [94%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [94%] - 2010/6/10 20:47 ○
- MySQL 総合 Part18 (986) - [94%] - 2011/1/17 15:46
- MySQL 総合 Part22 (1001) - [94%] - 2012/7/10 16:45
- MySQL 総合 Part23 (992) - [89%] - 2013/8/11 17:00
- MySQL 総合 Part26 (860) - [89%] - 2023/2/2 9:30
- MySQL 総合 Part21 (1001) - [89%] - 2011/12/25 22:16
- MySQL 総合 Part20 (995) - [89%] - 2011/10/17 4:48
- MySQL 総合 Part24 (1010) - [89%] - 2015/2/14 4:46
- MySQL 総合 Part25 (947) - [89%] - 2017/6/18 6:30
- MySQL vs PostgreSQL Part2 (941) - [36%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について