我在 Azure SQL DB 中运行以下查询:
SELECT
[TransactionID],
[TrackingNumber],
TRY_CAST([EventCode] as int) as EventCode,
[EventDesc] ,
[EventTime],
[EventCountry],
[EventState],
[EventCity],
[EventPostCode],
[SpecialOperDesc],
[Reference]
FROM [dbo].[MyTable]
with (index = IX_EventTime_TrackNum_Reference)
WHERE EventTime>= dateadd(d,-15,getdate())
AND LEN(TrackingNumber) >= 22
AND Reference IS NOT NULL
强制它使用IX_EventTime_TrackNum_Reference
带有 Index Hint 的非聚集索引,直到最近它才起作用。执行计划是非聚集索引查找加上聚集索引上的查找。
现在它尝试对现有的非聚集列存储索引使用列存储索引扫描。我可以使用以下代码实时查看:
exec sp_WhoIsActive @get_plans = 2
性能变差,因为非聚集列存储索引的大小比 IX_EventTime_TrackNum_Reference 大得多,并且它在增量存储中有一些数据。SQL DB 相对较小,存储速度很慢。
是什么导致查询忽略索引提示?以及如何强制它IX_EventTime_TrackNum_Reference
再次使用?