Страница 1 из 1

Как оптимизировать запрос

Добавлено: 24 ноя 2010, 09:16
ufsergey
Здравствуйте, есть таблица proparchnum с полями propid, propvalue,datetime. Установлен индекс asc для поля datetime. В таблице около 11 миллионов записей, используется firebird 1.5.
Необходимо выбрать из таблицы для PROPID=1 запись с последней датой datetime, причём дата datetime <= '23.11.2010 00:00:00'.

Делаю такой запрос

Код: Выделить всё

SELECT first 1 datetime,propvalue FROM proparchnum where PROPID=1 and datetime<= '23.11.2010 00:00:00' order by datetime desc 
Запрос работает, но время выполнения из за наличия индекса asc равно 1 сек. Можно ли как то переделать запрос для ускорения без изменения индекса?

Re: Как оптимизировать запрос

Добавлено: 24 ноя 2010, 16:32
Dimitry Sibiryakov
А изменить индекс мешает религия? Он всё равно в этом запросе абсолютно бесполезен.

Re: Как оптимизировать запрос

Добавлено: 24 ноя 2010, 16:54
ufsergey
менять индекс нельзя, бд уже используется в работающей системе и данный индекс нужен для корректной работы системы с другими запросами.

Re: Как оптимизировать запрос

Добавлено: 25 ноя 2010, 14:32
Dimitry Sibiryakov
Индексы никак не влияют на корректность работы запросов. Только на их скорость.

Создайте ещё один индекс, в чём проблема-то?..

Re: Как оптимизировать запрос

Добавлено: 25 ноя 2010, 15:58
ufsergey
Создание ещё одного индекса desc по полю datetime не даёт прироста скорости. Может надо кроме добавления индекса desc как то переделать сам запрос?

Re: Как оптимизировать запрос

Добавлено: 26 ноя 2010, 14:24
Dimitry Sibiryakov
Да, не использовать строковую константу.