SQL Server 2008:按日期时间排序太慢
我的表(SQL Server
2008)拥有100万以上的记录,当我尝试按日期时间排序记录时,它需要1秒钟,但是当我按ID(int)排序时,它仅需要约0.1秒钟。
有什么办法可以提高效率吗?(我已经将datetime列添加到索引中了)
-
通过排序
id
可能使用聚簇索引扫描,而通过datetime
排序或索引查找来排序。这两种方法都比聚簇索引扫描慢。
如果您的表格是由集群的
id
,则基本上意味着它已经被排序了。记录包含在中B+Tree
,该记录具有一个按id
顺序链接页面的链接列表。引擎应仅遍历链接列表以获取由排序的记录id
。如果
id
按顺序插入,则表示行的物理顺序将与逻辑顺序匹配,并且聚集索引扫描将更快。如果您希望按来对记录进行排序
datetime
,则有两种选择:- 从表中获取所有记录并对它们进行排序。速度很明显。
- 在上使用索引
datetime
。索引存储在磁盘的单独空间中,这意味着引擎需要在嵌套循环中的索引页和表页之间穿梭。它也更慢。
为了改善顺序,您可以在上创建一个单独的覆盖索引
datetime
:CREATE INDEX ix_mytable_datetime ON mytable (datetime) INCLUDE (field1, field2, 鈥�)
,并将您在查询中使用的所有列都包含在该索引中。
该索引就像表的卷影副本,但是数据以不同的顺序排序。
这将使您摆脱键查找(因为索引包含所有数据),这将使排序
datetime
速度与on一样快id
。更新:
有关此问题的新博客文章:
-
如何在Doctrine 2中按日期时间排序?
2021-06-04 关注 0 浏览90 1答案
-
在MySQL中按名称分组之前按日期和时间排序
2021-02-02 关注 0 浏览115 1答案
-
按线性时间排序
2021-01-31 关注 0 浏览82 1答案
-
按线性时间排序?
2021-01-31 关注 0 浏览57 1答案
-
将日期和时间字段组合到DateTime,SQL Server 2008
2021-05-10 关注 0 浏览83 1答案
-
在SQL Server 2008中创建日期
2021-04-20 关注 0 浏览184 1答案
-
为什么在SQL Server 2008中[日期] +([时间]-[偏移量])是不确定的?
2021-06-04 关注 0 浏览145 1答案
-
在SQL Server 2008 R2中获取年,日和小时的日期时间
2021-05-10 关注 0 浏览116 1答案
-
SQL Server 2008排序规则冲突-如何解决?
2021-05-20 关注 0 浏览225 1答案
-
如何按时间排序
2021-02-01 关注 0 浏览92 1答案