Строю по этой колонке 2 индекса - обычный по всем записям таблицы и фильтрованный с данными за последний месяц.
CREATE NONCLUSTERED INDEX [test_table_create_dt_1] ON [dbo].[test_table] ( [create_dt] ASC ); --кол-во строк - 66 171 892
CREATE NONCLUSTERED INDEX [test_table_create_dt_2] ON [dbo].[test_table] ( [create_dt] ASC ) WHERE ( [create_dt] >= '2023-05-01' ); --кол-во строк - 1 940 974
Запрос указанный ниже использует индекс [test_table_create_dt_1], хотя казалось бы логичнее было бы использовать фильтрованный - он занимает меньше места и в нем меньше строк.
select top 700 id, create_dt
from test_table
where 1=1
and create_dt > '20230520'
and create_dt < '20230525'
order by cl.create_dt
Есть мысли?
Мысль такая, что логарифму всё равно, 2 там миллиона записей или 60
order by cl.create_dt - тебе ж надо взять самые старые записи 700 штук, так ?
Обсуждают сегодня