【发布时间】:2016-03-07 15:42:36
【问题描述】:
我有一张非常大的桌子,里面有很多行(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
为什么会这样?我没有对列进行任何过滤。
【问题讨论】:
-
请为表和索引包含(最小化)DDL。您检查过查询计划吗?
-
500多列的表??这听起来像是一个可怕的设计。没有更多细节,这里充其量只是猜测。
标签: sql-server performance indexing