SQL 查询的奇怪查询计划 - 聚集索引查找

问题描述

对于为非常简单的 sql 查询生成查询计划,我遇到了一个非常奇怪的问题。查询正在搜索全文索引,并返回记录数。

出于某种原因,此 sql 查询正在对索引生成非聚集扫描,我认为这不是最佳做法。我相信对于计数而言,由于主键位于全文索引中,因此只需要聚集查找即可。

有人对为什么使用这样的查询计划有任何建议吗?

奇怪的是,sql 的变体略有不同,有时它使用聚集索引(这真的很快),有时它使用非聚集搜索

这是查询

EXEC sp_executesql N'SELECT count(T.[ID])
FROM [dbo].[Item] AS T
WHERE CONTAINS (
        (
            T.[Description]
            ),@P0M
        )
',N'@P0M nvarchar(4000)',@P0M = N'"mouse*"'

这是查询计划:https://support.google.com/accounts/answer/6010255?hl=en 如您所见,非集群搜索成本为 51%,加上位图上的 8% 并行度和 15% 哈希匹配。

表中有很多数据。超过 300 万条记录。

非常感谢

编辑: 这是计划:https://i.stack.imgur.com/1XJcf.png

这是表定义:

CREATE TABLE [dbo].[Item](
    [ID] [uniqueidentifier] NOT NULL,[Description] [nvarchar](500) NOT NULL,[Manufacturer] [uniqueidentifier] NOT NULL,[Manufacturer Name] [nvarchar](100) NULL,[Manufacturer Item No.] [nvarchar](50) NOT NULL,[BC Item No.] [varchar](20) NULL,[CRM Item No.] [varchar](50) NULL,[Category] [uniqueidentifier] NULL,[Version No.] [varchar](50) NULL,[Blocked] [bit] NULL,[UNSPSC Code] [int] NULL,[Barcode] [char](13) NULL,[Last Update Date Time] [datetime] NULL,[Weight (kg)] [decimal](18,3) NULL,[RRP] [decimal](18,2) NULL,[RRP Currency] [uniqueidentifier] NULL,[timestamp] [timestamp] NOT NULL,CONSTRAINT [PK_Item] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,FILLFACTOR = 99,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

还有很多外键。

这是唯一的其他索引:

CREATE UNIQUE NONCLUSTERED INDEX [Manufacturer Part No] ON [dbo].[Item]
(
    [Manufacturer] ASC,[Manufacturer Item No.] ASC
)
INCLUDE([ID]) WITH (PAD_INDEX = OFF,SORT_IN_TEMPDB = OFF,DROP_EXISTING = OFF,ONLINE = OFF,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO

解决方法

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...