我的问题是关于SQL服务器表的性能。
假设我有一个包含许多列的表,例如30列,其中1列已编入索引。该表有大约30,000行。
如果我执行选择索引列的选择,还有一个,例如:
SELECT IndexedColumn, column1
FROM table
这比在只有2列的表上执行相同选择并执行SELECT * ...
基本上,如果我没有从额外的列中检索数据,那么额外列的存在会减慢选择查询事件吗?
答案 0 :(得分:2)
由于您不必为最终客户端(SSMS或其他应用程序)打印/传递其余信息,因此在流程的最后会有细微差别。
当执行基于聚簇索引的读取时,所有列(没有BLOB)都保存在同一页面集中,以便读取您必须访问同一组页面的数据。
如果您在列表列表中有非聚簇索引,那么您会看到性能提升,因为它们会保存在自己的数据页结构中(因此读取的内容较少)。
答案 1 :(得分:0)
假设您在两种方案中在表上定义主键时使用SQL Server创建的默认聚簇索引,则不会,这两种方案之间不应存在任何性能差异。也许值得一试,并生成一个实际执行计划,亲眼看看? - 实际上不确定上面是否正确,因为这是rowstore,第一个表不能在每个页面上安装尽可能多的行,因此在读取数据时会遭受更多的IO /磁盘开销。