【发布时间】:2012-02-18 00:52:11
【问题描述】:
我有一个使用全文索引搜索产品(250,000 行)的存储过程。
存储过程带一个参数,即全文搜索条件。这个参数可以为空,所以我添加了一个空检查,查询突然开始运行速度变慢了几个数量级。
-- This is normally a parameter of my stored proc
DECLARE @Filter VARCHAR(100)
SET @Filter = 'FORMSOF(INFLECTIONAL, robe)'
-- #1 - Runs < 1 sec
SELECT TOP 100 ID FROM dbo.Products
WHERE CONTAINS(Name, @Filter)
-- #2 - Runs in 18 secs
SELECT TOP 100 ID FROM dbo.Products
WHERE @Filter IS NULL OR CONTAINS(Name, @Filter)
以下是执行计划:
查询 #1
查询 #2
我必须承认我对执行计划不是很熟悉。对我来说唯一明显的区别是连接不同。我会尝试添加一个提示,但我的查询中没有加入我不知道该怎么做。
我也不太明白为什么要使用名为 IX_SectionID 的索引,因为它是一个只包含 SectionID 列的索引,而该列在任何地方都没有使用。
【问题讨论】:
标签: sql-server performance sql-server-2008-r2 sql-execution-plan