У меня есть полнотекстовый индекс столбца в таблице, которая содержит такие данные:Полнотекстовый поиск индекса имеет большое количество чтения страниц
searchColumn
90210 Brooks Diana Miami FL [email protected] 5612233395
колонна представляет собой совокупность Zip, фамилия, имя, имя, город, штат, адрес электронной почты и номер телефона.
Я использую этот столбец для поиска клиента на основе любой из этой возможной информации.
Проблема, о которой я беспокоюсь, связана с большим количеством чтений, возникающих при выполнении запроса в этом столбце. Запрос я использую:
declare @searchTerm varchar(100) = ' "FL" AND "90210*" AND "Diana*" AND "Brooks*" '
select *
from CustomerInformation c
where contains(c.searchColumn, @searchTerm)
Теперь, когда работает Profiler я могу видеть, что этот поиск имеет около 50,000 страницу читает возвращать одну строку, в отличие при использовании другого подхода с использованием регулярных индексов и нескольких переменных , измельчали как @firstName
, @LastName
, как показано ниже:
WHERE C.FirstName like coalesce(@FirstName + '%' , C.FirstName)
AND C.LastName like coalesce(@LastName + '%' , C.LastName)
etc.
Используя этот подход, я получаю только около 140 страницы читает. Я знаю, что подходы совершенно разные, но я пытаюсь понять, почему в полнотекстовой версии так много читается, и если есть какой-либо способ, я могу довести это до чего-то ближе к цифрам, которые я получаю при использовании обычных индексов.
Хорошо, я получаю комментарий о '*', на самом деле я вытягиваю только те столбцы, которые мне нужны, я просто ставил '*' не слишком сложный вопрос, потому что есть много столбцов. Кроме того, я думаю, было бы странно, если бы движок заходил и читал страницу каждый раз, когда ему приходилось проверять его на состояние, если оно уже было на странице в первый раз. Но я проверю учебники Brent, спасибо! –