2016-03-07 40 views
1

我有一个非常大的表,有许多行(5000万)和500多列。它的指标是期限和客户。我需要保留一段时间客户端和另一列(而不是索引)。这需要太多时间。所以我想了解为什么:sql select性能(微软)

如果我做的:

select count(*) 
from table 
where cd_periodo=201602 

只需不到1秒,返回编号为2万美元。

如果我选择到一个临时表的时期,它也让没有时间(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

请包括(最小化)表和索引的DDL。您是否检查过查询计划? –

+0

超过500列的表格?这听起来像一个可怕的设计。没有更多的细节,这里最好是猜测。 –

回答

2

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

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

+0

@Downvoter有什么好的理由? – sagi

+0

谢谢,但为什么整个表?我认为它首先查找列名,然后查找值。 – GabyLP