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 , создавая
внутри фильтр, и работает как нужно. А есть ли еще какой красивый, и
гарантированно работающий в будущем способ?

Или надо гарантированно работающий на всех версиях?


--
Дмитрий Еманов

Ответить