基本的に私たちはMysqlsのパフォーマンスに非常に満足しています。同様のクエリは分割して完了します。今度はこのクエリの問題に直面するMySqlsのパフォーマンスを低下させる原因は何ですか?
SELECT dc.id,dmr.art_id
FROM dmr
JOIN dma ON dma.id = dmr.dml_id
JOIN dc ON dc.id = dma.dc_id
WHERE dmr.art_id = 2285
5021行をフェッチするのに50秒かかる。索引の不足は、おそらくそのような問題の最も一般的な原因です。だから私はEXPLAINでクエリを先行させ、インデックスだけが逐次スキャンを使用しないことを示すこのクエリプランを得ました。
表dmrおよびdmaにはそれぞれ300万行があり、dcには6000行があります。
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
| 1 | SIMPLE | dmr | ref | FKC33D5199F17E1825,ix_art_ref | ix_art_ref | 5 | const | 5021 | Using where |
| 1 | SIMPLE | dma | eq_ref | PRIMARY,FK8C6E1445153BBDC9 | PRIMARY | 8 | dev.dmr.dml_id | 1 | |
| 1 | SIMPLE | dc | eq_ref | PRIMARY | PRIMARY | 8 | dev.dma.dc_id | 1 | Using index |
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
この問題の原因は何ですか?
MySqlバージョンはInnoDBをエンジンとして使用して5.5です。 (ウィンドウのデフォルトパラメータのみ)。
I削除
EDIT句は、MySQLは(巨大)は直ちに結果セットを返す場合。この場合、 クエリプランは次のようになります。
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
| 1 | SIMPLE | dc | index | PRIMARY | FKAEB144C64FA71464 | 9 | NULL | 4037 | Using index |
| 1 | SIMPLE | dma | ref | PRIMARY,FK8C6E1445153BBDC9 | FK8C6E1445153BBDC9 | 9 | dev.dc.id | 263 | Using where; Using index |
| 1 | SIMPLE | dmr | ref | FKC33D5199F17E1825 | FKC33D5199F17E1825 | 9 | dev.dma.id | 1 | Using where |
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
あなたにハード・ディスクに接続されている可能性が最も高いI/Oです。 'innodb_buffer_pool'サイズ変数をRAMの70%に増やしてください。このようにして、作業データセットの一部がメモリに保持され、参照がはるかに高速になります。 –
テーブルを分析しよう... http://dev.mysql.com/doc/refman/5.0/en/analyze-table.html –
@Neville - 私はすでに行っています、ステータスは大丈夫です。 – stacker