tes*_*der 0 t-sql database sql-server indexing
我测试了非聚簇索引的好处.
我使用db AdventureWorks当我执行查询时:
SELECT [address].City, [address].[AddressLine1]
FROM [AdventureWorks].[Person].[Address] as [address]
WHERE [address].City = 'Seattle'
Run Code Online (Sandbox Code Playgroud)
我在执行计划选项卡中看到
/*
Missing Index Details from SQLQuery3.sql -
The Query Processor estimates that implementing the following index could improve the query cost by 97.9636%.
*/
/*
USE [AdventureWorks]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [Person].[Address] ([City])
GO
*/
Run Code Online (Sandbox Code Playgroud)
我在执行简单选项卡图标"聚集索引扫描"中看到,我知道它是坏的,因为索引搜索更好
但是当我执行查询时
USE [AdventureWorks]
GO
CREATE NONCLUSTERED INDEX CityIdx
ON [Person].[Address] ([City])
GO
Run Code Online (Sandbox Code Playgroud)
我仍然看到执行中的普通标签"Clustered index scan".为什么不"聚集指数寻求"?它应该是"聚集索引寻求"吗?在哪些情况下它应该是"聚集索引寻求".
您正在达到索引引爆点:只有太多条目City = 'Seattle'需要为每个条目寻找AddressLine1聚集索引.对于此特定查询,一种方法是包括投影列:
CREATE NONCLUSTERED INDEX CityIdx
ON [Person].[Address] ([City])
INCLUDE ([AddressLine1]);
Run Code Online (Sandbox Code Playgroud)
但这隐藏了真正的问题,即为什么你有兴趣选择这种非选择性谓词的所有行?申请不应提出此类要求.
| 归档时间: |
|
| 查看次数: |
4829 次 |
| 最近记录: |