Som*_*luk 42 mysql performance index order-by
我已经向表中添加了用于搜索结果的索引。我按 ASC 或 DESC 顺序显示结果。那么该列是否应该有索引?我在那个表上还有 2 个索引。对该列建立或不建立索引对性能有何影响?
Aar*_*own 33
是的,MySQL 可以在 ORDER BY 中的列上使用索引(在某些条件下)。但是,MySQL 不能将索引用于混合ASC,DESC order by ( SELECT * FROM foo ORDER BY bar ASC, pants DESC)。分享您的查询和 CREATE TABLE 语句将有助于我们更具体地回答您的问题。
有关如何优化 ORDER BY 子句的提示:http : //dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
编辑 2012-01-21 8:53AM
关于在 ORDER BY 中使用混合 ASC/DESC 的索引的声明的来源存在问题。来自ORDER BY 优化文档:
在某些情况下,MySQL 无法使用索引来解析 ORDER BY,尽管它仍然使用索引来查找与 WHERE 子句匹配的行。这些案例包括:
...
你混合 ASC 和 DESC:
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
...
此外, DESC 关键字在 CREATE INDEX 中没有意义
index_col_name 规范可以以 ASC 或 DESC 结尾。这些关键字允许用于指定升序或降序索引值存储的未来扩展。目前,它们被解析但被忽略;索引值始终按升序存储。
小智 9
对于任何想知道与 PostgreSQL 相关的答案的人来说,答案是肯定的,将使用索引。根据PostgreSQL 文档,查询规划器“将考虑通过扫描与规范匹配的可用索引,或通过按物理顺序扫描表并进行显式排序来满足 ORDER BY 规范。” 这意味着如果有一个规划器可以使用的索引,它会这样做,在检索匹配的行后回退到进行排序。