table1
имеет огромные строки, а field1
- текст, поэтому я создаю полнотекстовый индекс field1
.
. Я запускаю sql ниже, он очень медленный, а процессор до 100% до конца.
select * from (
select *, ROW_NUMBER() OVER(Order by [createtime] DESC) AS RowId
from table1
where CONTAINS(field1, 'sometext')
) AS t1
where t1.RowId between 1 and 10
Я удаляю запрос RowId
, он становится быстрым, меньше 1 с.
select * from (
select *, ROW_NUMBER() OVER(Order by [createtime] DESC) AS RowId
from table1
where CONTAINS(field1, 'sometext')
) AS t1
Тогда я думаю, что речь идет об оптимизации SQLServer, я пытаюсьДобавьте zero
в RowId
поле запроса.
Это быстро!Но почему?
select * from (
select *, ROW_NUMBER() OVER(Order by [createtime] DESC) AS RowId
from table1
where CONTAINS(field1, 'sometext')
) AS t1
where t1.RowId + 0 between 1 and 10