Является ли полнотекстовый поиск в одной таблице быстрее, чем в двух таблицах?

#sql-server #sql-server-2012 #full-text-search #lucene.net

#sql-server #sql-server-2012 #полнотекстовый поиск #lucene.net

Вопрос:

На странице полнотекстового поиска http://msdn.microsoft.com/en-us/library/ms189760.aspx в MSDN говорится, что если вы хотите выполнить полнотекстовый поиск по нескольким таблицам, просто «используйте объединенную таблицу в вашем предложении FROM для поиска в результирующем наборе, который является произведением двух или более таблиц».

Мой вопрос в том, не будет ли это очень медленно, если вам нужно объединить две очень большие таблицы? Если я объединяю таблицу продуктов с таблицей категорий и в ней миллионы записей, не займет ли объединение много времени, а затем придется искать после объединения?

Ответ №1:

Объединение миллионов записей все равно может быть быстрым, если объединение оптимизировано для производительности, например, для одного столбца int, который индексируется в обеих таблицах. Но могут быть и другие факторы, поэтому лучший подход — попробовать и оценить производительность самостоятельно.

Если соединение не выполняется должным образом, у вас есть несколько вариантов:

  • Создайте представление объединенных таблиц, создайте полнотекстовый индекс в этом представлении и выполняйте полнотекстовые запросы к этому представлению.
  • Создайте 3-ю таблицу, которая представляет собой комбинацию 2 таблиц, к которым вы присоединяетесь, создайте для нее полнотекстовый индекс и выполняйте свои полнотекстовые запросы к этой таблице. Для его обновления вам понадобится что-то вроде процесса ETL.