Запрос возвращает разные результаты - PullRequest
4 голосов
/ 01 сентября 2011

У меня 2 запроса (я верю, что они должны возвращать одинаковое количество строк :)):

1

SELECT NAME
FROM myDataBase.myTable
WHERE CONTAINS(NAME, 'ABC')

2

SELECT NAME
FROM myDataBase.myTable
WHERE NAME LIKE '%ABC%'

Но на практике у меня есть следующие результаты (например):

для запроса (1.)

  • первое выполнение запроса (1.): 980 затронутых строк
  • второе выполнение запроса (1.): 996 затронутых строк
  • ...
  • N выполнение запроса (1.): 1000 затронутых строк

и для запроса (2.)

  • первое выполнение запроса (2.): 1000 затронутых строк

Итак, мой вопрос: почему это происходит? Что я делаю не так? :)

P.S. Я новичок в Sql Server и его функциональные возможности, так что я понимаю, что это все мое отсутствие теории, ничего не нашел по этому вопросу, поэтому решил спросить

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

CONTAINS является полнотекстовым предикатом и ищет слово «ABC» в полнотекстовом индексе в соответствии с правилами средства разбиения по словам текущего языка.

Как сканирует столбец.

Таким образом, LIKE найдет 'XABCX', а CONTAINS - нет.

1 голос
/ 01 сентября 2011

CONTAINS работает от механизма полнотекстового поиска.

Вполне возможно, что индексы FTS перестраиваются между выполнениями этого запроса. Если это так, то я ожидаю результатов, которые вы видите.

Так что, либо не используйте FTS, либо измените график заполнения FTS на что-то более приемлемое.

...