>Типы данных какие? Статистика свежая?
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 по индексу