Будет ли полнотекстовый поиск учитывать индексы? - PullRequest
0 голосов
/ 15 ноября 2009

Хорошо. У меня есть полнотекстовый поисковый индекс, созданный в моей таблице JobsToDo, но меня беспокоит, если это сделает мои другие индексы таблицы бесполезными. У меня есть нормальный некластеризованный индекс в поле CreatedDate в этой таблице. Поэтому, когда я запускаю свой полнотекстовый поиск, он возвращает результаты, я затем фильтрую свой полнотекстовый поиск по CreatedDate> = GETDATE () - 7, чтобы получить JobsToDo за последние 7 дней. Используется ли мой обычный индекс (для CreatedDate) или он игнорирует этот индекс и выполняет только поиск по полнотекстовому индексу, а затем просто снова ищет критерии даты во всей таблице? Мой запрос выглядит так:

// First create an index
CONSTRAINT [IX_JobsToDo] UNIQUE NONCLUSTERED 
(
    [CreateDate]
)

// Now run query
SELECT                      JobId,
                            Title,
                            FROM JobsToDO
                            FREETEXTTABLE (JobsToDo, (Title, [Description]), 'somestring')
                                AND CreatedDate >= GETDATE() - 7;

Подводя итог, будет ли этот запрос использовать мой индекс, который я создал на CreatedDate, или нет?

Ответы [ 2 ]

1 голос
/ 15 ноября 2009

Да, оптимизатор запросов рассмотрит использование комбинации индексов FT и не FT. См. Этот документ Полнотекстовые запросы SQL Server 2005 к большим каталогам: извлеченные уроки для получения дополнительной информации.

Кстати, ваш некластеризованный индекс CreateDate по-прежнему подчиняется другим рекомендациям по использованию индекса. В вашем случае, если количество записей за последние 7 дней достаточно велико, оптимизация запроса может упасть для переломного момента индекса , поскольку CreateDate не покрывает заголовок (при условии, что JobId является частью ключа кластерного индекса в противном случае JobId также нуждается в покрытии). С другой стороны, если критерии поиска FT очень избирательны, индекс CreatedDate может быть опущен, и кластерный индекс будет использоваться для поиска кандидатов, найденных индексом FT, и проверки условия CreatedDate.

0 голосов
/ 16 ноября 2009

Результат этого полностью зависит от версии SQL Server, которую вы используете. До 2008 года SQL Server имел отдельные планы запросов для каждой части запроса, когда у вас были как полнотекстовые, так и не полнотекстовые предикаты. С 2008 года вся работа теперь выполняется внутри SQL Server, и для нее предусмотрен единый план запросов.

Итог: используйте SQL Server 2008, если для вас важен полный текст. Другая причина для этого состоит в том, что полнотекстовые индексы теперь находятся внутри базы данных и управляются как все другие объекты базы данных, в отличие от более ранних версий, где они хранились вне базы данных в файловой системе. (2005 пытался помочь, создавая резервные копии и восстанавливая их одновременно, но это был взлом по сравнению с существующим механизмом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...