【问题标题】:sql select performance (Microsoft)sql 选择性能(微软)
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但为什么是整张桌子?我以为它先查找列名,然后查找值。
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多