Содержит выполняет намного медленнее с переменной или константной строкой SQL Server - PullRequest
2 голосов
/ 16 марта 2010

По неизвестной причине я сталкиваюсь с проблемой, когда передача переменной в хранимую процедуру полнотекстового поиска выполняется во много раз медленнее, чем выполнение того же оператора с постоянным значением. Любая идея, почему и как этого можно избежать?

Это выполняется очень быстро:

SELECT * FROM table
WHERE CONTAINS (comments, '123')

Это выполняется очень медленно и время ожидания:

DECLARE @SearchTerm nvarchar(30)
SET @SearchTerm = '123'
SET @SearchTerm = '"' + @SearchTerm + '"'

SELECT * FROM table
WHERE CONTAINS (comments, @SearchTerm)

Имеет ли это какой-либо смысл ???

Ответы [ 3 ]

2 голосов
/ 16 марта 2010

это работает медленно: SELECT * FROM table WHERE CONTAINS (comments, N'123') ??

вы используете varchar '123' в первом примере и переменную nvarchar во втором примере. Это преобразование типов может вызывать проблемы. Как определяется столбец?

Также зачем заключать значение переменной в " в двойные кавычки, но не делайте то же самое в первом примере. Когда вы выполняете те же самые запросы, используя литерал и переменную, выполняете ли вы по-другому?

2 голосов
/ 16 марта 2010

Я видел ту же проблему при попытке использовать переменную для top. SQL Server не может настроить запрос, который использует переменную таким образом.

Вы должны попробовать использовать команду execsql.

0 голосов
/ 18 марта 2010

Я думаю, что Мэтт б прав. Первый запрос, который вы ищете

123

Во втором запросе вы ищете

'123'

Второй запрос с кавычками, вероятно, не возвращает результатов, и ваша программа, скорее всего, отключена, а не запрос.

...