>Типы данных какие? Статистика свежая?

CREATE TABLE CONT_RES (
    SERV_ID   INTEGER NOT NULL,
    RESOURCE  VARCHAR(30) NOT NULL,
    CONT_ID   INTEGER NOT NULL
);

CREATE TABLE CONTRACTS (
    CONT_ID       INTEGER NOT NULL,

После пересчета статистики, первый запрос и правда стал давать
нормальный план
PLAN JOIN (CR INDEX (PK_CONT_RES), CT INDEX (RDB$PRIMARY13))

Но если в него поставить cr.resource is null то один фиг получаем
полное чтение CONT_RES по индексу

>Без кол-ва записей в таблицах и селективности индексов гадать бесполезно.

В обеих по 1747 записей

>> И тут же получаем полное индексированное чтение CONT_RES

>Так полное или индексированное?
По индексу, но количество чтений=количеству записей в таблице

>> CONT_RES.RESOURCE определен как NOT NULL, и входит в первичный ключ.
>> Почему сразу не понять, что читать ничего не надо?

>А если ты удалишь PK и понапихаешь нуллов, когда запрос уже
>отпрепарирован и считает, что читать нуллы не надо? :-)

Была бы сермяжная правда в твоих словах, если бы при попытке удалить
PK использующийся в препарированном
запросе, не получал бы со 100% вероятностью Object ... in use
Так что вы уж или крестик снимите...(с) :)
Кроме того, мне казалось что с какой-то версии FB уже умеет искать
NULL по индексу

Ответить