小编Fir*_*xit的帖子

查询选择所有记录时不使用索引

这是我第一次处理大型数据库,我想知道为什么下面的两个查询在执行计划方面是不同的。

我在特定表上设置了索引:

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)

在此处输入图片说明

这是一个更大的。

我期望两个查询都使用索引。但是第二个查询执行全表扫描。

为什么会这样?我错过了什么?

sql-server t-sql sql-server-2012

2
推荐指数
1
解决办法
2281
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1

t-sql ×1