План запроса

Запросы, планы, оптимизация запросов, ...

Модераторы: 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.

Ответить