表具有多列时的SQL Server性能

时间:2017-08-02 08:08:06

标签: sql-server

我的问题是关于SQL服务器表的性能。

假设我有一个包含许多列的表,例如30列,其中1列已编入索引。该表有大约30,000行。

如果我执行选择索引列的选择,还有一个,例如:

SELECT IndexedColumn, column1
FROM table

这比在只有2列的表上执行相同选择并执行SELECT * ...

更慢

基本上,如果我没有从额外的列中检索数据,那么额外列的存在会减慢选择查询事件吗?

2 个答案:

答案 0 :(得分:2)

由于您不必为最终客户端(SSMS或其他应用程序)打印/传递其余信息,因此在流程的最后会有细微差别。

当执行基于聚簇索引的读取时,所有列(没有BLOB)都保存在同一页面集中,以便读取您必须访问同一组页面的数据。

如果您在列表列表中有非聚簇索引,那么您会看到性能提升,因为它们会保存在自己的数据页结构中(因此读取的内容较少)。

答案 1 :(得分:0)

假设您在两种方案中在表上定义主键时使用SQL Server创建的默认聚簇索引,则不会,这两种方案之间不应存在任何性能差异。也许值得一试,并生成一个实际执行计划,亲眼看看? - 实际上不确定上面是否正确,因为这是rowstore,第一个表不能在每个页面上安装尽可能多的行,因此在读取数据时会遭受更多的IO /磁盘开销。