我有一个非常大的MySQL表,其中包含约15万行数据。目前,当我尝试运行
SELECT * FROM table WHERE id = '1';
该代码运行良好,因为ID字段是主要索引。但是,对于该项目的最新开发,我必须按另一个字段搜索数据库。例如:
SELECT * FROM table WHERE product_id = '1';
该字段先前未编制索引;但是,我添加了一个,因此mysql现在为该字段建立索引,但是当我尝试运行上述查询时,它运行非常缓慢。一个EXPLAIN查询显示,当我已经添加了product_id字段时,没有针对product_id字段的索引,因此该查询需要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,这可能会有所帮助。这可能是问题的根源吗?
EXPLAIN
结果吗?您确定没有索引吗?还是索引在那里,但是MySQL选择不使用它?