Как может запрос с ТОП-10 длиться бесконечно дольше, чем тот же запрос без ТОП-10?

У меня очень простая ситуация:

У меня есть табличная функция под названием FullTextPagina определяется следующим образом:

select * from Pagina as p where contains(p.PageText, @term)

И затем у меня есть 2 запроса:

declare @term nvarchar(4000)= N'"DIEGO NUNES J COMBINADO"'

SELECT Id, DtPagina
FROM FullTextPagina(@term)
ORDER BY DtPagina DESC

SELECT TOP 10 Id, DtPagina
FROM FullTextPagina(@term)
ORDER BY DtPagina DESC

Они идентичны, за исключением того факта, что второй включает оператор TOP 10 . И они ничего не возвращают. 0 рядов.

Первый выполняется мгновенно. Для завершения требуется 1:20 м.

Почему?

PS:

  1. Я правильно настроил полнотекстовый индекс
  2. У меня некластеризованный, неуникальный убывающий индекс на DtPagina
  3. План выполнения такой здесь: http://i.imgur.com/77vJB.png

РЕДАКТИРОВАТЬ

Отвечая на @MartinSmith, любопытно, что «Количество выполнений» для табличных функций составляет 1,18 миллиона для ТОП-10. случай и 1 для другого случая

ИЗМЕНИТЬ 2

XML-план выполнения http://tecnologia.novaprolink.com.br/Execution%20plan.xml

ИЗМЕНИТЬ 3

Добавление опции (перекомпиляция) или снятие параметров не влияет на результат

SELECT Id, DtPagina
FROM FullTextPagina(N'"DIEGO NUNES J COMBINADO"')
ORDER BY DtPagina DESC

SELECT TOP 10 Id, DtPagina
FROM FullTextPagina(N'"DIEGO NUNES J COMBINADO"')
ORDER BY DtPagina DESC
OPTION (RECOMPILE)

РЕДАКТИРОВАТЬ 4

Полный код для FullTextPagina

USE [RexConsumo_2011_11]
GO

/****** Object:  UserDefinedFunction [dbo].[FullTextPagina]    Script Date: 11/24/2011 11:43:09 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[FullTextPagina] (@term nvarchar(4000))
RETURNS TABLE 
AS
RETURN 
(
    select * from Pagina as p where contains(p.PageText, @term)
)

GO

9
задан André Pena 11 December 2013 в 06:47
поделиться