Ваш запрос собирает много данных, поэтому можно ожидать, что он будет медленным.
Последовательное сканирование на order
является самым быстрым методом, потому что вам нужна половина строк в таблице.
В целом, PostgreSQL должен прочитать более миллиона блоков, чтобы вычислить результат и обработать все эти данные, поэтому три минуты неплохие.
Я сомневаюсь, что этот запрос можно сделать быстрее.
DATEDIFF(@date1, @date2)/7
, который возвращает дробь, которую, я предполагаю, вы захотите каким-то образом округлить с помощью CEIL ()
, ROUND ()
или FLOOR ()
Мой тестовый пример с двумя определенными датами:
SELECT FLOOR(DATEDIFF(DATE(20090215), DATE(20090101))/7);