У меня очень простая ситуация:
У меня есть табличная функция под названием 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:
DtPagina
РЕДАКТИРОВАТЬ
Отвечая на @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