ТОП 2 быстрее, чем ТОП 1 в Sql Server? - PullRequest
4 голосов
/ 02 февраля 2010

у нас есть таблица с + - 500k строк в базе данных Sql Server 2005, и один из ее столбцов имеет полнотекстовый индекс.

Мы проводили несколько тестов и обнаружили, что SELECT TOP 1 ... WHERE CONTAINS (fullTextColumn, 'anyValue') возвращался более двух минут. Однако тот же выбор, но с ТОП 2 вместо 1, вернется через несколько секунд.

Есть идеи, почему это происходит?

Спасибо!

Редактировать: Еще немного информации о проблеме. В плане запросов TOP 1 Sql использует удаленное сканирование, а в TOP 2 - поиск по индексу. Очень странно.

Редактировать 2: Оба плана выполнения из Sql:

ТОП 1

StmtText
--------------------------------------------------------------------------------------------------------------------------------------------------
  |--Top(TOP EXPRESSION:((1)))
       |--Nested Loops(Left Semi Join, WHERE:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto] = [Full-text Search Engine].[KEY]))
            |--Index Scan(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01]))
            |--Remote Scan(OBJECT:(CONTAINS))

ТОП 2

StmtText
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  |--Top(TOP EXPRESSION:((2)))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([Full-text Search Engine].[KEY]))
            |--Remote Scan(OBJECT:(CONTAINS))
            |--Index Seek(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01]), SEEK:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto]=[Full-text Search Engine].[KEY]) ORDERED FORWARD)

1 Ответ

0 голосов
/ 04 февраля 2010

Я не уверен на 100%, могу ли я сказать, что это исправлено, но, похоже, так и есть. Вчера вечером наш администратор баз данных перестроил каталог FullText и реорганизовал его, и он начал работать. Оба запроса теперь выполняются менее чем за секунду.

Я не могу объяснить почему, но это работает.

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