Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Monk
- Сообщения: 38
- Зарегистрирован: 30 май 2006, 12:33
Сообщение
Monk » 21 сен 2007, 11:30
Всем доброго дня
Почему при написании запроса вида
Код: Выделить всё
SELECT MIN(O1.ORDERDATE)
FROM ORDERED O1
WHERE O1.ORDERED_ID = :IDVALUE
INTO :MINDATE_VAR
IB7.51 берет индекс по полю в агрегате, а не по primary ключу? (в оригинальном запросе в where стоит другое поле, иначе в агрегате смысла нет)
Приходится либо через FOR SELECT делать либо в запрос подставлять поле, что в условии записано, либо +0 к дате добавлять - тогда план корректно строится сам
Имхо, странное поведение планировщика
-
dimitr
- Разработчик Firebird
- Сообщения: 888
- Зарегистрирован: 26 окт 2004, 16:20
Сообщение
dimitr » 22 сен 2007, 21:09
на самом деле, он берет оба индекса. Но о втором умалчивает. Об этом детально написано в статье на данном сайте.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 24 сен 2007, 11:33
dimitr писал(а):на самом деле, он берет оба индекса.
Дык вроде речь о FB1.5 была. Или IB7.51 так же делает? (это догадка или ты знаешь?
)
-
dimitr
- Разработчик Firebird
- Сообщения: 888
- Зарегистрирован: 26 окт 2004, 16:20
Сообщение
dimitr » 24 сен 2007, 13:22
точно знать я не могу :-) Но так себя вел даже IB6.