【发布时间】:2015-03-15 12:31:35
【问题描述】:
如果[column1]被索引,下一个查询可能使用索引:
SELECT * FROM [table] WHERE [column1] LIKE 'starts%'
如果我引入一个变量,下面的查询将永远不会使用索引:
DECLARE @starts nvarchar(100)
SET @starts = 'starts%'
SELECT * FROM [table] WHERE [column1] LIKE @starts
我想根据用户输入实现 StartsWith 搜索,但我不确定选择哪种方式:
为 LIKE 正确转义用户输入,以便优化器能够根据文字选择计划
使用 WITH(FORCESEEK)
- 使用选项(重新编译)
【问题讨论】:
-
另一种选择是查看全文搜索。
-
为什么你的第二个查询不使用索引?
-
我暂时不打算维护全文搜索索引
-
由于变量,第二个查询以某种通用方式编译。我在互联网的某个地方读到了这些东西
-
虽然更多地关注参数化而不是局部变量,但这篇 dba 帖子可能至少有点用处:dba.stackexchange.com/questions/33698/…
标签: sql sql-server sql-server-2008 tsql sql-like