gpt4 book ai didi

sql - 使用变量和索引的 T-SQL LIKE

转载 作者:行者123 更新时间:2023-12-03 00:12:04 24 4
gpt4 key购买 nike

如果[column1]已建立索引,则下一个查询可能使用索引:

SELECT * FROM [table] WHERE [column1] LIKE 'starts%'

如果我引入一个变量,下面的查询将永远不会使用索引:

DECLARE @starts nvarchar(100)
SET @starts = 'starts%'
SELECT * FROM [table] WHERE [column1] LIKE @starts

我想根据用户输入实现 StartsWith 搜索,但我不确定选择什么方式:

  1. 为 LIKE 正确转义用户输入,以便优化器能够根据文字选择计划

  2. 使用WITH(FORCESEEK)

  3. 使用选项(重新编译)

最佳答案

还有另一个您未列出的选择。您可以使用 OPTIMIZE FOR 选项强制查询优化器对预期变量值的性质做出正确的假设。这似乎非常符合您的需求。

DECLARE @starts nvarchar(100)
SET @starts = 'starts%'
SELECT * FROM [table] WHERE [column1] LIKE @starts
OPTION (OPTIMIZE FOR (@starts = 'mnopq%'))

this blog中有更详细的描述。 。还有MSDN documentation .

Instructs the query optimizer to use a particular value for a local variable when the query is compiled and optimized. The value is used only during query optimization, and not during query execution.

关于sql - 使用变量和索引的 T-SQL LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com