Как я могу получить план выполнения запроса в Informix?

Мне нужно что-то похожее на то, что я получаю в Oracle с explain plan или в SQL Server с set showplan_all on.

Я подключаюсь из приложения .NET (используя IBM.Data.Informix), если это важно.

Благодарность!

5
Diego Mijelshon 21 Июл 2009 в 04:27

2 ответа

Лучший ответ

В вашем SQL вы можете:

  • execute SET EXPLAIN ON; Это будет действовать до тех пор, пока вы не отключите или не выполните эквивалентную инструкцию OFF. Работает, по крайней мере, до версии 7, может даже работать в версии 5.
  • добавьте директиву оптимизатора (начиная с версии 9), например SELECT {+EXPLAIN} foo, bar FROM .... Вы также можете использовать SELECT --+EXPLAIN \n foo bar ... в зависимости от точного синтаксиса вашего SQL (вы не можете закрыть - комментарий, он длится до конца строки). Этот вариант действует только для этого оператора SELECT.

Место написания файла объяснения во многом зависит от ОС сервера базы данных. Это может быть домашний каталог вашего пользователя или каталог в $INFORMIXDIR.

4
RET 21 Июл 2009 в 08:20
@RET: это более ранняя версия, чем версия 5; Я считаю, что SET EXPLAIN присутствовал в Informix-SQL 1.10 (1985).
 – 
Jonathan Leffler
22 Июл 2009 в 02:19
1
@Diego: всегда указывайте версию IDS; это имеет значение. Например, IDS 11.50 предоставляет возможность SET EXPLAIN FILE TO 'filename' [WITH APPEND]; вы можете указать, где (на сервере) создается файл. Тем не менее, выходные данные по-прежнему поступают в файл, поэтому вам потребуется доступ к файлу на сервере. Если вы можете его запутать, функцию FILETOCLOB можно использовать для извлечения файла на стороне сервера в значение CLOB: INSERT INTO SomeTable VALUES(FILETOCLOB('/file/name','server')), а затем вы можете передать CLOB клиенту с помощью обычного SELECT (и проанализировать текст файл - получайте удовольствие!). Я не сказал просто!
 – 
Jonathan Leffler
22 Июл 2009 в 02:24
@Diego: Да, вам понадобится доступ к серверу базы данных, если только вы не можете заставить метод Джонатана FILETOCLOB () работать на вас. Если добавление SET EXPLAIN в ваше приложение является проблемой, вы также можете использовать onmode -Y 1 , но опять же, это зависит от доступа к серверу. Существует также таблица sysmaster под названием syssqexplain, которая содержит некоторую закодированную информацию, которую вы можете использовать, хотя она не заменяет фактический текст плана запроса.
 – 
RET
22 Июл 2009 в 10:03
Извините, это должно было быть в режиме -Y 1
 – 
RET
22 Июл 2009 в 10:03
Можете ли вы расширить использование syssqlexplain? Я пишу инструмент запросов с несколькими базами данных с открытым исходным кодом, который должен работать максимально прозрачно для обычных пользователей, поэтому доступ к файловой системе не является вариантом. Конечным результатом этого в идеале должно быть дерево плана запроса, показывающее частичные затраты и потенциальные узкие места.
 – 
Diego Mijelshon
23 Июл 2009 в 19:55

Какая версия Informix?

Есть некоторая информация, относящаяся к v10, для [SET EXPLAIN].

0
lavinio 21 Июл 2009 в 06:56