我有一个非常大的 MySQL 表,包含大约 150,000 行数据。目前,当我尝试运行时
SELECT * FROM table WHERE id = '1';
由于 ID 字段是主索引,因此代码运行良好。
然而,对于该项目最近的发展,我必须通过另一个字段搜索数据库。例如:
SELECT * FROM table WHERE product_id = '1';
该字段之前未被索引;然而,我添加了一个,所以 mysql 现在索引该字段,但是当我尝试运行上面的查询时,它运行得非常慢。 EXPLAIN 查询显示,当我已经添加了 Product_id 字段时,该字段没有索引,因此查询需要 20 分钟到 30 分钟的时间才能返回一行。
我的完整解释结果是:
| 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_index` (`product_id`)
从不比较integer
to strings
在 MySQL 中。如果id
is int
,删除引号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)