为什么服务器不对给定查询使用索引

问题描述

我有一个非常简单的案例,我需要加快查询的执行时间

exec sp_executesql N'select top 201 N0."id" from "dbo"."tab1" N0
where ((N0."dateTime1" >= @p0) and (N0."dataTime1" <= @p1) and ((N0."varchar1" <> @p2) or N0."varchar1" is null))
order by N0."id" asc',N'@p0 datetime,@p1 datetime,@p2 nvarchar(4000)',@p0='2020-10-01 00:00:00',@p1='2020-10-31 23:59:59',@p2=N'ZZ'

我确实尝试了许多不同的 indexex,但服务器没有在其执行计划中使用它。

CREATE NONCLUSTERED INDEX [index1] ON [dbo].[tab1]
(
    [dateTime1] ASC,[varchar1] 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]

当我手动将 WITH(INDEX(index1)) 添加查询时,它就像一个魅力,但我无法访问生成查询的应用程序,只能访问数据库

当我删除 order by N0."id" asc 时,查询使用索引成功,但正如我所说,我无法修改查询

我将不胜感激! :)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)