約150,000行のデータを含む非常に大きなMySQLテーブルがあります。現在、実行してみると
SELECT * FROM table WHERE id = '1';
IDフィールドがプライマリインデックスであるため、コードは正常に実行されます。しかし、プロジェクトの最近の進展のために、別のフィールドでデータベースを検索する必要があります。例えば:
SELECT * FROM table WHERE product_id = '1';
このフィールドは以前に索引付けされていませんでした。ただし、1つ追加したので、mysqlはフィールドにインデックスを付けますが、上記のクエリを実行しようとすると、実行速度が非常に遅くなります。EXPLAINクエリにより、product_idフィールドに既にインデックスを追加している場合、インデックスがないことがわかります。その結果、クエリは20分から30分で1つの行を返します。
私の完全な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として格納されていることに注意してください。これが問題の原因でしょうか?
EXPLAIN
結果を投稿できますか?インデックスがないのは確かですか?またはインデックスはそこにありますが、MySQLはそれを使用しないことを選択していますか?