我有一个包含域和 ID 的表 查询是
select distinct domain
from user
where id = '1'
索引使用的顺序 idx_domain_id
比 idx_id_domain
快
如果执行顺序是
(FROM clause,WHERE clause,GROUP BY clause,HAVING clause,SELECT clause,ORDER BY clause)
那么如果查询使用排序的 where
列比 select
列查询应该更快。
- 在 15:00 到 17:00 显示我正在处理的相同查询 https://serversforhackers.com/laravel-perf/mysql-indexing-three
该表有 460 万行。
最佳答案
这是您的查询:
select distinct first_name
from user
where id = '1';
您观察到 user(first_name, id)
比 user(id, firstname)
快。
为什么会这样?首先,这可能只是您计时方式的人工产物。如果您的表真的很小(即数据适合单个数据页),那么索引对于提高性能通常不是很有用。
其次,如果您只运行一次查询,那么在您第一次运行查询时,您可能会有一个“冷缓存”。第二次,数据已经存储在内存中,所以运行速度更快。
其他问题也可能出现。您没有指定时间安排。微小的差异可能是由于噪声造成的,可能没有意义。
您没有提供足够的信息来给出更明确的解释。这将包括:
- 在冷缓存上重复计时。
- 表的大小信息和匹配行数。
- 布局信息,尤其是
id
的类型。 - 解释这两个查询的计划。
关于mysql - 通过索引中列的顺序优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215529/