这是我第一次处理大型数据库,我想知道为什么下面的两个查询在执行计划方面是不同的。
我在特定表上设置了索引:
CREATE NONCLUSTERED INDEX [IX_UBHSD_xploc_trandt2] ON [dbo].[UBHSD]
(
[xploc] ASC, [trandt2] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,它使用索引。
SELECT COUNT(*) as cnt
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2012-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
但是当我在不使用聚合的情况下运行查询时:
SELECT *
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2008-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
我期望两个查询都使用索引。但是第二个查询执行全表扫描。
为什么会这样?我错过了什么?