Nikolay Ponomarenko wrote:
Уж не знаю, правильно ли назвал сообщение, но встретилась задача искуственно "затупить" оптимизатор.
Версия ФБ какая?
К селекстивной процедуре нужно приджойнить еще одну, но тяжелую. Основная процедура, RDB$RELATIONS_SEL вполне себе фильтруется условием R.RDB$RELATION_ID < 10, допустим до 2-х записей. Но сервер, логично, об этом не знает, и накладывает ограничение уже после слияния потоков.
Ничего логичного тут не вижу. Должен накладывать до слияния.
На примере - сначала джойнится процедура и таблица, а потом накладывается ограничение. SELECT * FROM ( SELECT R.* FROM RDB$RELATIONS_SEL R WHERE R.RDB$RELATION_ID < 10 ) REL JOIN RDB$RELATION_FIELDS F ON F.RDB$RELATION_NAME = REL.RDB$RELATION_NAME
Внести в трекер, завтра-послезавтра взять новый билд, забыть о проблеме.
Как недокументированный хинт работают FIRST (2^32)/SKIP 0 , создавая внутри фильтр, и работает как нужно. А есть ли еще какой красивый, и гарантированно работающий в будущем способ?
Или надо гарантированно работающий на всех версиях? -- Дмитрий Еманов

