我有一个非常大的MySQL表,大约有150,000行数据.目前,当我尝试并运行时
SELECT * FROM table WHERE id = '1';
代码运行正常,因为ID字段是主索引.
但是,对于项目的最新开发,我必须通过另一个字段搜索数据库.例如:
SELECT * FROM table WHERE product_id = '1';
此字段先前未编入索引;但是,我添加了一个,所以mysql现在索引该字段,但是当我尝试运行上面的查询时,它运行得非常慢. EXPLAIN查询显示,当我已经添加了一个索引时,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可能会有所帮助.这可能是问题的根源吗?
解决方法:
ALTER TABLE `table` ADD INDEX `product_id` (`product_id`)
永远不要在MySQL中比较整数和字符串.如果id为int,则删除引号.