【发布时间】:2015-12-28 20:27:51
【问题描述】:
我正在尝试在搜索过程中使用Contains()。全文索引已创建并正在运行。出现问题是因为您不能在 NULL 变量或参数上使用 Contains() 调用,它会引发错误。
这需要 9 秒才能运行(传入非空参数):
--Solution I saw on another post
IF @FirstName is null OR @FirstName = '' SET @FirstName = '""'
...
Select * from [MyTable] m
Where
(@FirstName = '""' OR CONTAINS(m.[fname], @FirstName))
这会立即运行(传入非空参数)
IF @FirstName is null OR @FirstName = '' SET @FirstName = '""'
...
Select * from [MyTable] m
Where
CONTAINS(m.[fname], @FirstName)
只需在“包含”前面添加额外的“或”,就完全改变了查询计划。我也尝试过使用“case”语句而不是“OR”,但无济于事,我仍然得到缓慢的查询。
有没有人解决过全文搜索中的空参数问题或遇到我的问题?任何想法都会有所帮助,谢谢。
我使用的是 SQL Server 2012
【问题讨论】:
-
这 2 个查询返回相同的结果?
-
是的,它们返回相同的结果。
标签: stored-procedures sql-server-2012 full-text-search query-optimization