【问题标题】:Descending sort order indexes降序排序索引
【发布时间】:2010-10-27 00:40:20
【问题描述】:
Database Engine Tuning Advisor 终于放弃了幽灵,帮不了我了,所以我不得不多学习一点关于索引的知识(不应该是索引吗?)。
我想我或多或少在那里。我知道什么时候使用复合索引,我的索引中包含什么,聚集索引和非聚集索引的区别等等。
但是...有一件事仍然让我感到困惑。创建索引时,索引有一个排序顺序。我理解这意味着什么,但我很难想到逆序索引可能有用的场景。我最好的猜测是加快检索出现在前向排序索引末尾的行的查询,例如按时间顺序排列的最近的行,但坦率地说,我或多或少一无所知。
谁能赐教?
【问题讨论】:
标签:
sql
sql-server
indexing
performance
【解决方案1】:
当您为将按降序排序的查询设计索引时,您对索引进行降序排序。
【解决方案2】:
索引的排序顺序仅对多列索引很重要。对于单列,Sql Sever 可以逆序使用索引,如果它想要索引为 ASC 的 DESC。
对于多列搜索,索引排序确实很重要。假设你有一个索引:
field1, field2 desc
这对于这个查询很有用:
select field1, field2 from table order by field1, field2 desc
而对于这个查询,其中的索引可以反向使用:
select field1, field2 from table order by field1 desc, field2
但是对于这个查询,Sql Server 需要额外的内存排序:
select field1, field2 from table order by field1, field2
【解决方案4】:
最新数据通常存在偏差,因此如果您按“日期降序”排序,则可以针对此用例进行优化。
我想这对于数字而不是字母的东西会更有意义。