sql select performance(微软)

时间:2016-03-07 15:42:36

标签: sql-server performance indexing

我有一个非常大的表,有很多行(5000万)和500多列。它的索引是期间和客户。我需要保留一段时间客户端和另一列(而不是索引)。这需要太多时间。所以我想了解原因:

如果我这样做:

select count(*)
from table
where cd_periodo=201602

只需不到1秒钟即可返回200万。

如果我选择临时表,那么它也不需要花费时间(2秒)

select cd_periodo
into #table
from table
where cd_periodo=201602

但如果我选择另一列不属于索引,则需要3分钟以上。

select not_index_column
into #table
from table
where cd_periodo=201602

为什么会这样?我没有在列上做任何过滤器。

1 个答案:

答案 0 :(得分:2)

当您选择索引列时,阅读器不必处理并进入整个表并读取整行。索引有助于读者选择值而无需实际获取行。

当您选择非索引列时,与我所说的相反,读者必须阅读整个表格才能从此列中获取值。