約150,000行のデータを持つ非常に大きなMySQLテーブルがあります。現在、実行しようとすると
SELECT * FROM table WHERE id = '1';
ID フィールドがプライマリ インデックスであるため、コードは正常に実行されます。ただし、プロジェクトの最近の開発では、別のフィールドでデータベースを検索する必要があります。例:
SELECT * FROM table WHERE product_id = '1';
このフィールドは以前はインデックス化されていませんでしたが、インデックスを追加したため、mysql はフィールドにインデックス化しますが、上記のクエリを実行しようとすると、実行速度が非常に遅くなります。 EXPLAIN クエリでは、product_id フィールドにインデックスが存在しないことが明らかになりますが、これは既にインデックスを追加しているためです。その結果、クエリが 1 行を返すのに 20 分から 30 分かかります。
完全な EXPLAIN 結果は次のとおりです。
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
先ほど確認したところ、ID フィールドは INT として保存されているのに対し、PRODUCT_ID フィールドは VARCHAR として保存されていることがわかりました。これが問題の原因でしょうか?
ベストアンサー1
ALTER TABLE `table` ADD INDEX `product_id_index` (`product_id`)
MySQL ではinteger
と を比較しないでください。が の場合は、引用符を削除します。strings
id
int