Индексированное представление SQL Server для полнотекстового поиска

Я хочу использовать функцию полнотекстового поиска Microsoft SQL Server.

Если у меня есть таблица Client, которая ссылается на другие таблицы, такие как City, Country, Department и т. Д., Лучше создать отдельную таблицу, в которой будут храниться ненормализованные данные, которые затем будут проиндексированы полным текстом, или лучше создать фиктивное значение в каждой сторонней таблице (например, с ключом -1), а затем замените NULL из таблицы Client соответствующими фиктивными значениями, затем создайте индексированное представление (эти фиктивные записи связаны с индексированным представлением и использованием 'внутреннего join 'вместо' left join '), а затем создать полнотекстовый индекс в этом представлении индекса?

С последним мне не пришлось бы беспокоиться о заполнении `` ненормализованной '' таблицы каждый раз, когда запись изменяется в клиенте или в любой из сторонних таблиц - Город, Страна, Отдел и т. Д.

Или, может быть, ничего из вышеперечисленного, я бы тоже мог использовать несколько новых идей :)


person pevgeniev    schedule 15.08.2010    source источник


Ответы (1)


Ни один из вышеперечисленных.

Сохраняйте данные нормализованными и создавайте отдельные индексы FT для каждой нормализованной таблицы. При запросе данных запрашивайте соответствующую таблицу. Если вы хотите, чтобы запрос охватывал несколько таблиц (например, если город, страна или отдел содержат «Йорк»), используйте обычные операторы запроса UNION для агрегирования результатов поиска по нескольким таблицам. Так работает FT, поэтому старайтесь, чтобы ваш дизайн соответствовал принципу работы этой функции. Не пытайтесь обмануть, вы только обожжетесь.

person Remus Rusanu    schedule 15.08.2010
comment
Вариант 1 в вопросе OP не является жизнеспособным решением, если производительность является проблемой? Для справки: stackoverflow.com/a/8932733/538962 - person mg1075; 12.04.2013