我有一个非常大的表,有很多行(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
为什么会这样?我没有在列上做任何过滤器。
答案 0 :(得分:2)
当您选择索引列时,阅读器不必处理并进入整个表并读取整行。索引有助于读者选择值而无需实际获取行。
当您选择非索引列时,与我所说的相反,读者必须阅读整个表格才能从此列中获取值。