2015-08-23 1 views
1

Я объявляя новую хранимую процедуру в MS SQL Server для выполнения полнотекстового поиска и мой запрос некоторые вещи, как это:Что такое хороший тип переменной для полнотекстового поиска в SQL Server

Select * from table WHERE FREETEXT((col1, col2), @Search_Statement) 

Вопрос имеет точно написано ниже:

Каков правильный тип данных для переменной @Search_Statement для поддержки большинства запросов, а также лучшей производительности?

(я знаю, что если я @Search_Statement переменную долго он поддерживает больше поисковых запросов, но выполняющиеся запросы с более @Search_Statement может повлиять на производительность и Google запросы ограничения поиска до 32 слов: https://www.linkedin.com/grp/post/1176637-216124982)

я не знаю какой из этих типов данных использовать для @Search_Statement в моей хранимой процедуре: Nvarchar (100), Nvarchar (500) или Nvarchar (MAX) Какой будет лучший выбор? (Производительность и все другие аспекты)

Обновление: Я знаю, что должен использовать nvarchar, но что такое правильный размер nvarchar? nvarchar (100), (200), (500), ... или даже nvarchar (MAX)?

+1

Лучшим переменным типом данных будет тип данных столбца, который вы ищете, серверу sql не придется делать неявные преобразования, следовательно, вы можете получить более высокую производительность. char/varchar/[Data Size] все должны соответствовать типу столбца. –

ответ

2

Согласно FREETEXT Documentation

FREETEXT ({column_name | (column_list) | *} , 'freetext_string' [ЯЗЫК language_term])

freetext_string является NVARCHAR. Неявное преобразование происходит, когда в качестве входного сигнала используется другой тип символьных данных. В следующем примере переменная @SearchWord, которая определена как varchar (30), вызывает неявное преобразование в предикате FREETEXT.

+0

Спасибо, но что такое nvarchar (размер) для переменной nvarchar? –

+0

Также относится к этой ссылке: 'Потому что параметр sniffing" не работает с преобразованием, используйте nvarchar для лучшей производительности. ' – Keith

+1

@MohammadHa nvarchar (8000) - это самый большой размер, разрешенный для строки freetext. nvarchar (max) не допускается. Я сомневаюсь, что размер влияет на производительность запроса - * содержимое * строки freetext будет иметь гораздо больший эффект. – Keith

Смежные вопросы