MySQL テーブルにインデックスを追加するにはどうすればいいですか? 質問する

MySQL テーブルにインデックスを追加するにはどうすればいいですか? 質問する

約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と を比較しないでください。が の場合は、引用符を削除します。stringsidint

おすすめ記事