SQL

SQL Server 2008:按日期时间排序太慢

发布于 2021-05-10 20:32:46

我的表(SQL Server
2008)拥有100万以上的记录,当我尝试按日期时间排序记录时,它需要1秒钟,但是当我按ID(int)排序时,它仅需要约0.1秒钟。

有什么办法可以提高效率吗?(我已经将datetime列添加到索引中了)

关注者
0
被浏览
775
1 个回答
  • 面试哥
    面试哥 2021-05-10
    为面试而生,有面试问题,就找面试哥。

    通过排序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

    更新:

    有关此问题的新博客文章:



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看