mysql:553
From: 民斗 <民斗 <tommy@xxxxxxxxxx>>
Date: Thu, 14 Jan 1999 19:02:00 +0900
Subject: [mysql 553] Re:MySQL speed
民斗です。 [Subject: [mysql 552] Re:MySQL speed] [Date: Thu, 14 Jan 1999 14:21:24 GMT From:Tatsuya Ina] > LinuxのtopコマンドでCPUとMemoryの使用率とかみてみると、 > like文の検索時も、between時の検索時もCPU,Memoryとも使用率は数%程度に > 留まっています。その間、HDDのアクセスランプは点灯しっぱなしです。 > > これってMySQLが十分にメモリーを使っていないということでしょうか? > それともデータが多きすぎて、MySQLのバッファーには取り込みきれず、 > ディスクへアクセスしにいくということでしょうか。 仮に MySQL 内部バッファが有効に使われるとしても、mysqld 起動後はじめて 使用するテーブルの場合は、ディスクから読む処理に時間がかかるのは仕方 ないと思います。 > 同じ検索をすぐ繰り返すと、2回目は、HDDへのアクセスはほとんどなく、10倍くらい > 速くなります。2回目はCPU使用率は95%程度になりますが、MySQLの使用するメモリー > はあまりかわりません。これはOSのディスクキャッシュでバッファリングされている > からでしょうかね。 ん〜、これだけでは、MySQL のバッファが使われているのか OS のバッファが 使われているのかちょっとわかりませんが…。 その後、MySQL は一切いじらずに、他の機能で大量にファイルを読み込むような 処理をした後に、再度同じクエリを試してみるってのはどうでしょう? それでも速いままなら MySQL のバッファが使われているってことでしょうし、 最初と同じくらいの速度なら、OS のバッファが使われてたということでしょう。 # あ、でも swap があると話がややこしくなるか…。 ところで、like とか between でなくて、= 演算子を使って試してみました。 mysql> select count(*) from TABLE1 where word="hoge"; +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.17 sec) mysql> select count(*) from TABLE1 where word="sunos"; +----------+ | count(*) | +----------+ | 776 | +----------+ 1 row in set (2.26 sec) mysql> select count(*) from TABLE1 where word="2"; +----------+ | count(*) | +----------+ | 15990 | +----------+ 1 row in set (12.57 sec) どうもこの結果を見るに、インデックステーブル中から特定の値を見つける のは速いけど、同じ値の行が複数ある場合、それらを走査するのに時間が かかってるような感じです。 つまり、ある値について検索する場合、その値を含む行が多ければ多いほど インデックスの効果は薄れるということかもしれません。 # そういえば DBMS のインデックスはそういうもんだという話をどっかで # 読んだような気もする…。 -- 民斗 <tommy@xxxxxxxxxx>
543 1999-01-14 05:27 [Tatsuya Ina <ina@xxx] Re:MySQL speed 545 1999-01-13 22:48 ┣[<takeshi@xxxxxxxxxx>] 550 1999-01-14 11:16 ┗[民斗 <tommy@xxxxxxxx] 552 1999-01-14 23:21 ┗[Tatsuya Ina <ina@xxx] -> 553 1999-01-14 19:02 ┗[民斗 <tommy@xxxxxxxx] 554 1999-01-15 00:32 ┗[Shogo Hamamoto <KHC0] 555 1999-01-15 12:39 ┗[<takeshi@xxxxxxxxxx>]