【发布时间】:2017-08-02 08:08:05
【问题描述】:
我的问题是关于 SQL Server 表的性能。
假设我有一个包含许多列的表,例如 30 列,其中 1 列被索引。该表大约有 30,000 行。
如果我执行一个选择索引列的选择,以及另外一个,例如:
SELECT IndexedColumn, column1
FROM table
这会比在只有 2 列的表上执行相同的选择并执行 SELECT * ... 慢吗
所以基本上,如果我不从额外列中检索数据,额外列的存在会减慢选择查询事件的速度吗?
【问题讨论】:
-
如果
column1不是您的索引的一部分,那么没有WHERE的SELECT将根本不会使用该索引。它必须使用聚集索引,是的,扫描 30 列的聚集索引比扫描 2 列中的一个要慢。也就是说 - 任何足够强大的服务器将在可能可以忽略不计的时间内扫描 30.000 行的任何内容,所以除非您每秒多次选择所有行,您不太可能注意到。如果column1是 索引的一部分(即,它正在覆盖),则不会命中聚集索引,并且表中的列数无关紧要。考虑INCLUDE。 -
Eric Lippert 写的不错performance rant
标签: sql-server