如何向MySQL表添加索引?

我有一个非常大的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,则删除引号.

上一篇:mysql – 有LIKE子句时的最佳索引类型


下一篇:mysql – 多列数据库索引和查询速度