将列添加到索引中的 INCLUDE 的影响
Effects of adding columns to INCLUDE in an index
我在 EmpId 上有一个索引。我想在索引中包含几列。
Create Index IX_01_EmpId On empTable(EmpId) INCLUDE (name, dept, salary, joining_dt).
我知道包含的列通过避免键查找来加快查询速度。它们如何影响 Insert/Update/Delete 语句的性能?当对 table 执行任何 Insert/Update/Delete 语句时,索引 table 在幕后会发生什么?
IMO,SELECT 方面的性能影响更大。
当SELECTing时,你可能会用到索引。如果您执行许多显示这些列的查询,并且您已将它们包含在索引中,它将避免如您所说的键查找。这是以索引的每个页面(SQL 将所有内容存储在 8KB 页面中)为代价的,因为它们更大,现在包含更少的行。因此,使用索引的同一查询将花费更长的时间,因为它必须扫描(查找)更多页面。包含的列越多,这种效果就越强。
当您执行 INSERT/UPDATE/DELETE 时,SQL 服务器必须维护此索引。它将相应地修改页面数据。我敢打赌,只要它必须从索引中 insert/update/delete 一个“行”并触摸它的页面,它就不会真正产生很大的不同。
我在 EmpId 上有一个索引。我想在索引中包含几列。
Create Index IX_01_EmpId On empTable(EmpId) INCLUDE (name, dept, salary, joining_dt).
我知道包含的列通过避免键查找来加快查询速度。它们如何影响 Insert/Update/Delete 语句的性能?当对 table 执行任何 Insert/Update/Delete 语句时,索引 table 在幕后会发生什么?
IMO,SELECT 方面的性能影响更大。
当SELECTing时,你可能会用到索引。如果您执行许多显示这些列的查询,并且您已将它们包含在索引中,它将避免如您所说的键查找。这是以索引的每个页面(SQL 将所有内容存储在 8KB 页面中)为代价的,因为它们更大,现在包含更少的行。因此,使用索引的同一查询将花费更长的时间,因为它必须扫描(查找)更多页面。包含的列越多,这种效果就越强。
当您执行 INSERT/UPDATE/DELETE 时,SQL 服务器必须维护此索引。它将相应地修改页面数据。我敢打赌,只要它必须从索引中 insert/update/delete 一个“行”并触摸它的页面,它就不会真正产生很大的不同。