SQL 索引优化与高级应用
1. 全表扫描与索引选择
在某些情况下,查询计划可能会调用全表扫描。例如:
|--Clustered Index
Scan(OBJECT:([tempdb].[produce].[vegetable].[PKvegetable]),
WHERE:([tempdb].[produce].[vegetable].[color]='green'))
这里返回的行数和数据量是固定的。不过, Xvegetable_color
索引的选择性较差,并且 produce.vegetable
表规模较小,优化器没有检查索引的直方图,而是直接选择了索引扫描。如果不确定表中是否存在某个索引,可以执行 sp_help 'produce.vegetable'
进行检查。
优化器在找到一个它认为执行时间与寻找更优计划相当或更短的计划时,就会停止寻找更好的计划。
2. 唯一索引的使用
UNIQUE
是一个重要的索引设置。在表设计中, UNIQUE
和 PRIMARY KEY
约束用于强制键的唯一性。SQL Server 在背后使用唯一索引来确保列或列组的唯一性。这是因为要确定一个值是否唯一,需要在表中查找该值,而 SQL Server 使用索引来加速数据访问,所以唯一索引是完美的选择。
在提高性能时,如果索引的数据允许,应使用唯一索引。例如,当构建的