mysql - 如何为 MySQL 表添加索引?

标签 mysql optimization indexing row

我有一个非常大的 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_index` (`product_id`)

永远不要将 integer 与 MySQL 中的 strings 进行比较。如果 idint,去掉引号。

关于mysql - 如何为 MySQL 表添加索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3002605/

相关文章:

mysql - 如何使用 rails ActiveRecord 以最小的成本实现连接列表的概念?

MYSQL - 无法正确加入 Group By 2 Columns

MySQL 带有子表达式的 bool 全文搜索

c++ - 防止对象在不需要时被链接?

python - pandas loc vs. iloc vs. at vs. iat?

php - 在不同日期更新2条记录?

delphi - 在 Delphi 中如何快速地将 "clamp"值放入范围内?

optimization - (简单?)折线图的标签放置

.net - 是否存在指定的(子)索引分隔符?

php - 从函数返回时访问数组元素