我在表中添加了用于搜索结果的索引。我按ASC或DESC顺序显示结果。那么该列应该有索引吗?我在那张桌子上还有2个索引。对该列建立索引或不建立索引会对性能产生什么影响?

评论

请发布查询

#1 楼

是的,MySQL可以在某些条件下在ORDER BY的列上使用索引。但是,MySQL不能对(SELECT * FROM foo ORDER BY bar ASC, pants DESC)的混合ASC,DESC顺序使用索引。共享您的查询和CREATE TABLE语句将帮助我们更具体地回答您的问题。

有关如何优化ORDER BY子句的提示:
http://dev.mysql.com/doc/ refman / 5.1 / zh-CN / order-by-optimization.html

编辑2012-01-21 8:53 AM

关于我使用“在ORDER BY中混合ASC / DESC
索引。在ORDER BY Optimization文档中:


在某些情况下,MySQL不能使用索引来解析ORDER BY,
尽管它仍然使用索引来查找与WHERE匹配的行。
子句。这些情况包括:

...

混合使用ASC和DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 ASC ;

...


另外,DESC关键字在CREATE INDEX中是没有意义的


以ASC或DESC结尾。这些
关键字可用于将来的扩展,用于指定升序
或降序索引值存储。目前,它们已被解析,但
被忽略;索引值始终按升序存储。


评论


“ MySQL无法将索引用于混合的ASC,DESC”。为此参考?

–超立方体ᵀᴹ
2012年1月21日,9:26

CREATE INDEX idx_foo ON foo(栏ASC,裤子DESC);应该管用。

–弗兰克·海肯斯(Frank Heikens)
2012年1月21日10:38



我的资料是我的答案中链接的mysql文档。搜索“混音”。

–亚伦·布朗
2012年1月21日12:43



MySQL在CREATE INDEX中解析asc和Desc,但忽略它们。索引始终按升序存储。 dev.mysql.com/doc/refman/5.5/en/create-index.html

–亚伦·布朗
2012年1月21日,12:54

MySQL 8.0的新增功能:现在,如果INDEX具有相同的混合,则可以混合使用ASC和DESC。

–里克·詹姆斯(Rick James)
19-09-18在6:19



#2 楼

对于任何想知道与PostgreSQL有关的答案的人,答案是肯定的,将使用索引。根据PostgreSQL文档,查询计划者将“考虑通过扫描与规范匹配的可用索引,或者通过按物理顺序扫描表并进行显式排序来满足ORDER BY规范。”这意味着,如果有一个计划者可以使用的索引,它将这样做,而在检索到匹配的行后便退回到进行排序。