Informix 查询计划

Posted

技术标签:

【中文标题】Informix 查询计划【英文标题】:Informix query plan 【发布时间】:2009-07-21 00:27:03 【问题描述】:

如何在 Informix 中获取查询的执行计划?

我需要类似于在 Oracle 中使用 explain plan 或在 SQL Server 中使用 set showplan_all on 获得的东西。

如果这很重要,我正在从 .NET 应用程序(使用 IBM.Data.Informix)进行连接。

谢谢!

【问题讨论】:

【参考方案1】:

在您的 SQL 中,您可以:

执行SET EXPLAIN ON; 这将一直有效,直到您断开连接或执行等效的OFF 语句。至少可以追溯到 v7,甚至可以在 v5 中工作。 添加优化器指令(v9 及更高版本),即SELECT +EXPLAIN foo, bar FROM ...。您还可以使用SELECT --+EXPLAIN \n foo bar ...,具体取决于您的 SQL 的确切语法(您不能关闭 -- 注释,它会运行到行尾)。此变体仅对 SELECT 语句有效。

解释文件的写入位置很大程度上取决于数据库服务器的操作系统。它可以是您用户的主目录,也可以是$INFORMIXDIR 中的目录。

【讨论】:

@RET:它比版本 5 更早;我相信 SET EXPLAIN 出现在 Informix-SQL 1.10 (1985) 中。 @Diego:总是引用IDS的版本;这很重要。例如,IDS 11.50 提供了一个选项SET EXPLAIN FILE TO 'filename' [WITH APPEND];您可以指定文件的创建位置(在服务器上)。但是,输出仍然会转到文件,因此您需要访问服务器上的文件。如果您可以调整它,则可以使用 FILETOCLOB 函数将服务器端文件拉入 CLOB 值:INSERT INTO SomeTable VALUES(FILETOCLOB('/file/name','server')) 然后您可以使用常规 SELECT 将 CLOB 拉到客户端(并解析文件的文本 -玩得开心!)。我没说容易! @Diego:是的,您需要访问数据库服务器,除非您可以让 Jonathan 的 FILETOCLOB() 方法为您工作。如果将 SET EXPLAIN 添加到您的应用程序是一个问题,您也可以使用 onmode -Y 1 但同样,这依赖于对服务器的访问。还有一个名为 syssqexplain 的 sysmaster 表,其中包含一些您可以使用的编码信息,尽管它不能替代实际的查询计划文本。 对不起,应该是onmode -Y 1 你能扩展一下 syssqlexplain 的用法吗?我正在编写一个开源多数据库查询工具,它应该对普通用户尽可能透明地工作,因此文件系统访问不是一种选择。理想情况下,由此产生的输出应该是显示部分成本和潜在瓶颈的查询计划树。【参考方案2】:

哪个版本的 Informix?

有一些与 v10 相关的信息,用于 [SET EXPLAIN]。

【讨论】:

以上是关于Informix 查询计划的主要内容,如果未能解决你的问题,请参考以下文章

informix SQL时快时慢

MS SQL Server 中的链接 Informix 表忽略标准?

如何使用 JDBC 使用 informix 的 genxmlquery 功能?

informix SQL查询咨询

如何在 Informix 上测量查询性能?

Informix “发生了语法错误。”使用子查询时