Sto riscontrando un comportamento strano con la seguente query T-SQL in SQL Server 2012:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
L'esecuzione di questa query da sola mi dà circa 1.300 risultati in meno di due secondi (c'è un indice full-text attivo Name
)
Tuttavia, quando cambio la query in questo:
SELECT Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"')
ORDER BY Name
OFFSET 0 rows
FETCH NEXT 10 ROWS ONLY
Ci vogliono più di 20 secondi per darmi 10 risultati.
La seguente query è ancora peggiore:
SELECT Id
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Name) AS RowNum, Id
FROM dbo.Person
WHERE CONTAINS(Name, '"John" AND "Smith"') ) AS RowConstrainedResult
WHERE RowNum >= 0 AND RowNum < 11
ORDER BY RowNum
Il completamento richiede più di 1,5 minuti!
Qualche idea?
SELECT TOP 10 * .... ORDER BY Name
?