powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Directives cannot be specifed in query with ansi join.
9 сообщений из 9, страница 1 из 1
Directives cannot be specifed in query with ansi join.
    #32956471
onstat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Захотелсь денормализовать табличку в отчете
и вот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select {+INDEX(tab1 i_timex )}
   case
      when  t.indexs='A'  then
            a.number
      when  t.indexs='B'   then
            b.name
   end as cname,
   extend(t.timestamp, year to second) as timestamp,
......другие поля .....................

from tab1 t left outer join tab2 a on t.rowserno=a.serno
             left outer join   tab3 b on t.rowserno=b.serno
where
t.indexs in ('A','B')
and t.timestamp  >= datetime( 2005 - 02 - 26   00 : 00 : 00 ) year to second
and  t.timestamp  <=datetime( 2005 - 02 - 26   00 : 00 : 00 ) year to second 
                                                                        +  1  units hours
order by  2 ;

sqlexplain.out
Estimated # of Rows Returned: 1940
Estimated Cost: 92630
Directives cannot be specifed in query with ansi join.

DIRECTIVES DISABLED:


Подскажите где можно подробнее почитать про subj.

Informix DS 9.40 UC4

с уважением, onstat
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32957891
Baco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У информикса проблемы прикручивания ANSI-синтаксиса к старым фичам. Похоже, что старая команда разработчиков ушла с informix внезапно, а новая команда не успела прочитать книги Карлтона Доу :)
Теперь, когда новая команда прикручивает к Informix ANSI-диалект, то от греха подальше старается избегать переписывания нового кода. Как движок в 7 версии переписали на online, так эволюция и остановилась - сейчас идёт прикрутка скотчем.

Почитай ids_9_40_defects.txt - там нверняка найдёшь описание своего косяка.
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32958001
gvf112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала,
сравни план запроса с директивой и без нее !!!

Далее, попробуй установить переменную окружения
NO_SUBQF=1 (есть подозрение, что это унаследованный баг) ...

Желаю удачи !!!

GVF112
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32958243
onstat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Baco
Почитай ids_9_40_defects.txt - там нверняка найдёшь описание своего косяка.

Спасибо за наводку
вот они:
ids_9_40_defects.txt

bug_number 167632
description OPTIMIZER DIRECTIVES DOES NOT WORK WITH ANSI LEFT OUTER JOIN
product_code ONLINE
component_code SQL


bug_number 160637
description PERFORMANCE OF NESTED ANSI LEFT OUTER JOIN IS VERY BAD
product_code ONLINE
component_code SQOPTIM

bug_number 155785
description EXCESSIVE MEMORY USAGE RUNNING A QUERY WITH ANSI OUTER JOIN
product_code ONLINE
component_code SQOPTIM



но больше всего меня порадовало это

ids_9_40_defects.txt

bug_number 151024
description CERTAIN QUERIES WITH ANSI INNER AND OUTER JOINS AND PRE-JOIN FILTERS MAKES THE ENGINE HANG
product_code ONLINE
component_code SQL



с уважением, onstat
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32958938
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BacoПохоже, что старая команда разработчиков ушла с informix внезапно, а новая команда не успела прочитать книги Карлтона Доу :)
Теперь, когда новая команда прикручивает к Informix ANSI-диалект, то от греха подальше старается избегать переписывания нового кода. Как движок в 7 версии переписали на online, так эволюция и остановилась - сейчас идёт прикрутка скотчем.

Как раз для 9.40 очень много было переписано заново (чего стоит только снятие ограничения на 2Гб) и на уровне движка (в том числе и оптимизатор), именно отсюда и огромное кол-во багов в версиях 9.40.хС1-5.
И команда, насколько я знаю, вся не разбегалась...
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32959089
gvf112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... Василий,
ты как всегда прав .... :)

Я бы - рекомендовал IDS 9.40.UC6 и выше ....
но переменную NOSUB_QF=1 (для 9.40) на всякий случай установил бы ...

Желаю удачи !!!

GVF112
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32959302
onstat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GVF112
Для начала,
сравни план запроса с директивой и без нее !!!



Планы однинаковы.

GVF112... Василий,
ты как всегда прав .... :)

Я бы - рекомендовал IDS 9.40.UC6 и выше ....
но переменную NOSUB_QF=1 (для 9.40) на всякий случай установил бы ...

Желаю удачи !!!

GVF112

А что значит это переменная окружения? (Лучше ссылку)
Поиски в документации и интернете пока ни к чему не привели.


С уважением, onstat
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32959557
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat GVF112
Для начала,
сравни план запроса с директивой и без нее !!!

Планы однинаковы.

Так исключи директиву из запроса. Как по мне, так эти директивы "есть зло" и должны использоваться только в крайних случаях, когда оптимизатор глючит.
onstat
А что значит это переменная окружения? (Лучше ссылку)
Поиски в документации и интернете пока ни к чему не привели.

-- Disable sub-query flattening (7.30+) --
Выключает выравнивание запросов (путём упрощения структуры разбиением на подзапросы)
set NO_SUBQF=1

Ссылок на подробное описание не знаю, но мне кажется, что в данном конкретном случае это не та проблема.
...
Рейтинг: 0 / 0
Directives cannot be specifed in query with ansi join.
    #32959800
onstat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasilis onstat GVF112
Для начала,
сравни план запроса с директивой и без нее !!!

Планы однинаковы.

Так исключи директиву из запроса. Как по мне, так эти директивы "есть зло" и должны использоваться только в крайних случаях, когда оптимизатор глючит.



Думаю что это и есть то крайний случай.
Весь прикол в том,
что по таблице tab1 существует нидекс по полям (indexs,rowserno,timestamp)
Который оптимизатор. по моему даже правильно, подхватывает для объединения таблиц, а по timestamp использует фильтр.
Существует также отдельный индекс по полю timestamp,
который я и хотел заставить использовать вместо фильтра(full scan).
Сбор/пересбор статистики ситуацию не поменял.
(в таблицах
tab1 ~40 млн
tab2 ~5 млн
tab3 ~5 млн)


onstat
А что значит это переменная окружения? (Лучше ссылку)
Поиски в документации и интернете пока ни к чему не привели.

-- Disable sub-query flattening (7.30+) --
Выключает выравнивание запросов (путём упрощения структуры разбиением на подзапросы)
set NO_SUBQF=1

Ссылок на подробное описание не знаю, но мне кажется, что в данном конкретном случае это не та проблема.[/quot]

Спасибо за разъяснение, я отчет уже зделал
через использование временных таблиц, и сейчас проблема
представляет чисто академический интерес.

С уважением, onstat
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Directives cannot be specifed in query with ansi join.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]