На сервере MySQL Django преобразует filter(date__year=2011)
в ... WHERE date BETWEEN 2011-01-01 00:00:00 and 2011-12-31 23:59:59.99
в SQL, что занимает 3 секунды. Если я вручную удалю временную часть и запущу ее как ... WHERE date BETWEEN 2011-01-01 and 2011-12-31
, время выполнения сократится на 1/100 до 30 мс.
Похоже, существует фундаментальная проблема с интерпретацией запросов диапазона дат. Любые идеи, чтобы обойти это?
Если я не могу найти способ использовать Django ORM, я добавлю в модель дополнительное поле года для хранения года и выполняю запрос для этого целочисленного поля года.
Спасибо за ваше время.
p.s: Из-за не зависящих от меня ограничений среда Django 1.1. Это может быть исправлено или лучше оптимизировано в новых версиях Django.