FLI*_*KER 1 sql-server indexing database-performance
我们知道在表上有索引会降低插入/更新/删除(CUD)性能.我想知道我是否使用字段作为包含列,影响(CUD)性能有多大.
我的意思是,比较以下索引之间的性能下降:
CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2)
Run Code Online (Sandbox Code Playgroud)
和
CREATE UNIQUE NONCLUSTERED INDEX [Idx1] ON dbo.Table (Col1, Col2) INCLUDE (Col3)
Run Code Online (Sandbox Code Playgroud)
笔记:
如果INCLUDE列涵盖查询,则该查询可能会快得多.缺点是使用索引的其他查询可能会稍慢.
使用此索引时,此索引未涵盖的查询可能会执行更多I/O. 添加INCLUDE列将扩大非聚集索引叶页上的行的大小.更宽的行意味着更少的行适合单个叶页.使用此索引查找许多行的查询将不得不加载更多页面.
INCLUDE列将导致索引占用更多磁盘空间.多少空间取决于列的数据类型.
如果扫描许多行,索引可能会在内存中占用更多空间.
确定INCLUDE列影响的最佳方法是测量它.事先对表运行查询并测量I/O,磁盘空间并记录查询计划.之后对它运行查询并执行相同操作.