2010-08-15 5 views
1

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

Если у меня есть клиент таблицы, который ссылается на другие таблицы, такие как Город, Страна, Департамент и т. Д., Лучше создать отдельную таблицу, в которой будут храниться де-нормализованные данные, которые затем будут индексироваться по полному тексту, или это лучше создать фиктивное значение в каждой внешней таблице (например, с ключом -1), а затем подставить NULL из таблицы клиента соответствующими значениями фиктивного типа, а затем создать индексированное представление (эти фиктивные записи из-за индексированного представления и использование «внутреннего соединения» вместо «левого соединения»), а затем создать полный текстовый индекс в этом представлении индекса?

С последним я бы не придется беспокоиться о том, заселяющих «де-нормированные» таблицу каждый раз, когда запись изменений в клиенте, или в какой-либо из иностранных таблиц - город, страна, отдел и т.д.

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

ответ

4

Ничего из перечисленного.

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

+0

Является ли вариант 1 в вопросе ОП не жизнеспособным решением, если производительность является проблемой? Для справки: http://stackoverflow.com/a/8932733/538962 – mg1075

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