Должен ли я использовать LIKE или CONTAINS для второго столбца? - PullRequest
0 голосов
/ 09 января 2019

У меня есть таблица с 2 столбцами (nvarchar(max) и varbinary(max). Бинарный столбец содержит документы PDF, и каталог и индекс настроены для использования этого столбца.

В столбце nvarchar содержится список идентификаторов (например, «12», «55», «69» и т. Д.). Этот столбец может содержать сотни идентификаторов, поэтому текст будет довольно длинным.

При создании поискового запроса я всегда использую CONTAINS, например:

SELECT *
FROM mytable
WHERE CONTAINS(mybinarycolumn, 'keyword')

В зависимости от поиска я могу использовать или не использовать дополнительный столбец. Поэтому я собирался использовать IF для выполнения второго запроса, например:

SELECT *
FROM mytable
WHERE CONTAINS(mybinarycolumn, 'keyword') AND
mytextcolumn LIKE '%"55"%'

Получу ли я удар по производительности, если использую LIKE? Можно ли объединить CONTAINS и LIKE в один CONTAINS, который может или не может использовать mytextcolumn в поиске? (Если необходимо использовать текстовый столбец, он всегда и AND с двоичным столбцом).

1 Ответ

0 голосов
/ 10 января 2019

При условии, что вариант нормализации не подходит для вас ...

Я уверен, что будет хит производительности. LIKE никогда не бывает высокопроизводительной операцией, и вы не можете создать индексы, которые могли бы вам помочь. Если вам повезет, оптимизатор SQL сначала выполнит часть запроса CONTAINS и применит LIKE только к соответствующим результатам. (Показать план выполнения будет вашим другом здесь.)

Я не могу придумать хороший способ объединить два столбца во что-то, что можно искать с помощью одного СОДЕРЖАНИЯ; все, что я придумаю, выглядит как большая работа, чем запрос, если он у вас есть.

Вы можете попробовать поместить полнотекстовый индекс в mytextcolumn, а затем использовать CONTAINS для этого столбца. Я не уверен, поможет ли это или нет, но, возможно, стоит попробовать.

Я предполагаю, что значения в mytextcolumn хорошо разделены. Если столбец содержит значения без кавычек, например, «12, 23,45,67,777,890» вместо «12», «23», «45», «67», «777», «890» ', ваше условие LIKE не будет работать так, как вы ожидаете (потому что «% 55%» соответствует как «11, 22,55», так и «11, 22,555»).

Удачи.

...