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

Модераторы: kdv, CyberMax

Ответить
ufsergey
Сообщения: 3
Зарегистрирован: 23 ноя 2010, 17:26

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

Сообщение ufsergey » 24 ноя 2010, 09:16

Здравствуйте, есть таблица 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 сек. Можно ли как то переделать запрос для ускорения без изменения индекса?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

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

Сообщение Dimitry Sibiryakov » 24 ноя 2010, 16:32

А изменить индекс мешает религия? Он всё равно в этом запросе абсолютно бесполезен.

ufsergey
Сообщения: 3
Зарегистрирован: 23 ноя 2010, 17:26

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

Сообщение ufsergey » 24 ноя 2010, 16:54

менять индекс нельзя, бд уже используется в работающей системе и данный индекс нужен для корректной работы системы с другими запросами.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

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

Сообщение Dimitry Sibiryakov » 25 ноя 2010, 14:32

Индексы никак не влияют на корректность работы запросов. Только на их скорость.

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

ufsergey
Сообщения: 3
Зарегистрирован: 23 ноя 2010, 17:26

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

Сообщение ufsergey » 25 ноя 2010, 15:58

Создание ещё одного индекса desc по полю datetime не даёт прироста скорости. Может надо кроме добавления индекса desc как то переделать сам запрос?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

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

Сообщение Dimitry Sibiryakov » 26 ноя 2010, 14:24

Да, не использовать строковую константу.

Ответить