【发布时间】:2010-12-15 13:34:38
【问题描述】:
我的表 (SQL Server 2008) 有超过 100 万条记录,当我尝试按日期时间排序记录时,需要 1 秒,但当我按 ID (int) 排序时,只需要大约 0.1 秒。
有什么办法可以提高效率吗? (我已经在索引中添加了日期时间列)
【问题讨论】:
-
该日期时间列是否在其自己的单独索引中?你说“添加..到索引”....如果日期时间列是例如列号3 在复合索引中,这在尝试单独按该日期时间列排序时根本无济于事............
-
我已将它添加到现有索引中,我只是尝试创建一个新索引,它变得相对更快(0.5 秒),但仍然比 int 列慢。
-
能否请您发布您的查询和表定义?
-
@silent:一个 DATETIME 列是 8 个字节 - 一个 INT 是 4 个字节。这意味着在您的索引页面上,INT 索引在 8K 页面上的条目数是 DATETIME 的两倍 - 无法更改。因此,INT 索引会更快,因为它会产生更少的 I/O,这是昂贵的部分。
-
@marc_s:ID要么是集群的PRIMARY KEY,要么不是。在第一种情况下,ID上的索引包含整个表,这比每条记录的4字节多得多。在第二种情况下,id和datetime上的索引都将包含一个行指针。在这两种情况下,索引大小的差异都将小于两倍。这里重要的是Key Lookup/RID Lookup,而不是索引大小。
标签: sql sql-server sql-server-2008 sql-order-by