我们有一个查询这是这样的:我是否需要ORDER BY列上的索引?
select *
from foo
where some_fk_id = <value>
and modified_date > 'date1'
and modified_date < 'date2'
order by modified_date desc;
我需要在上述情况下,以创建some_fk_id
和modified_date
一个综合指数?
我们有一个查询这是这样的:我是否需要ORDER BY列上的索引?
select *
from foo
where some_fk_id = <value>
and modified_date > 'date1'
and modified_date < 'date2'
order by modified_date desc;
我需要在上述情况下,以创建some_fk_id
和modified_date
一个综合指数?
你不需要一个综合指数,但满足some_fk_id
和modified_date
where子句可以用单独的索引来完成(即非常快),如果你做的。
要做的最好的事情是查看查询计划和配置文件。
您可以看到使用EXPLAIN
查询计划:
EXPLAIN SELECT * FROM foo WHERE some_fk_id=1 AND modified_date > 'date1' AND modified_date < 'date2' ORDER BY modified_date DESC;
既没有一个综合指数试试吧,看看有什么打算用它来了。可能发生的最糟糕的事情是filesort
- 如果你需要迅速,可以避免使用这些东西。
最重要的是,您将实际使用的查询,数据和硬件的运行时间测试。在您的特殊情况下,复合索引所占用的空间会让您减慢搜索速度,而不仅仅是搜索条目。例如,如果some_fk_id在表中具有非常高的选择性,则可能不需要二级索引。
它正在执行一个文件夹,我如何避免上述命令?我会尝试使用索引并更新你 – priya
不适用于ORDER BY - 适用于结果集后行被选中。如果您定期基于modified_date进行选择,则可能需要考虑其中一项。
顺便说一下,您提供的语句选择modified_date>两个不同的值。那应该是一个'>'和一个'<'?
是的,我已经修改了我的问题 - 对于输入错误 – priya
您选择的*会减少拥有索引的值,因为您的查询仍然需要执行密钥查找以获取剩余的值。但是,索引应该更快。最好明确列出要返回的列,并在创建索引时将它们列在INCLUDE子句中。 – sfuqua