【发布时间】:2011-08-23 20:24:03
【问题描述】:
我有一个巨大的表,在某些列 x 上的不同值的数量要少得多(按数量级)。
我需要做一个类似SELECT DISTINCT x FROM hugeTable 的查询,而且我想相对快一点。
我做了类似CREATE INDEX hugeTable_by_x ON hugeTable(x) 的操作,但由于某种原因,即使输出很小,查询执行速度也没有那么快。查询计划显示 97% 的时间都花在了 hugeTable_by_x 的索引扫描上,估计的行数等于整个表的大小。接下来是哈希匹配操作。
既然我在x 列上创建了一个索引,我不能指望这个查询运行得很快吗?
请注意,我使用的是 Microsoft SQL Server 2005。
【问题讨论】:
-
您好,您要索引的列是“int”字段吗?表上索引的想法是让系统映射出该索引在模型中的位置,然后使其更容易检索。如果这个字段除了只是一个值之外没有任何相关性,它真的不会有太大的区别,因为它仍然需要扫描表。
-
如果在
hugeTable和x=1中有1000 行,那么hugeTable_by_x仍然必须在x=1的叶级别中包含对这些行的1000 个引用。如果这些引用很广泛(hugeTable的聚类键是什么?),索引本身就会很大。 -
请注意,我也试过
SELECT x FROM hugeTable GROUP BY x,它给出了完全相同的查询计划。
标签: sql sql-server-2005 tsql indexing query-optimization