Проблема в том, что рассматриваемый запрос работает очень медленно по сравнению с запросом, выполняемым с одним или двумя, а не со всеми тремя его условиями.
Теперь запрос.
Select Count(*)
From
SearchTable
Where
[Date] >= '8/1/2009'
AND
[Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150))
AND
FreeText([Description], 'keyword list here')
Первое условие является самоочевидным. Второй использует UDF для получения списка Zip-кодов в пределах 150 миль от 30348. Третий использует полный текстовый индекс для поиска предоставленных слов.
Только с этим условием
[Date] >= '8/1/2009'
Запрос возвращает 43884 (размер таблицы составляет менее 500 тыс. строк) в 3 секунды.
Используя только это условие
[Zip] In (Select ZipCode from dbo.ZipCodesForRadius('30348', 150))
Я получаю 27920, также возвращается в 3 секунды.
И только с полной текстовой частью
FreeText([Description], 'keyword list here')
68404 возвращается в 8 секунд.
Когда я использую только почтовый индекс и полные текстовые условия, я получаю 4919 в 4 секунды.
Только дата и полные текстовые условия заставляют меня 9481 просто стесняться 14 секунд.
Использование условий даты и почтового индекса дает мне только 3238 в 14 секунд.
При всех трех условиях запрос возвращает 723 в 2 минуты, 53 секунды. (Wtfbbq)