2016-03-07 87 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