在其他数据库中EXPLAIN SELECT

时间:2009-08-31 15:20:32

标签: mysql oracle firebird sql-execution-plan ingres

我发现 EXPLAIN SELECT 查询在MySQL中非常有用,因为它提供了有关如何执行SQL的信息,并提供了分析的机会,例如,您应该添加的缺失索引以便提高响应BEFORE自己进行查询并分析统计数据。

我的问题是:在像MS Sql,Firebird,Ingres这样的数据库中,是否有类似的命令可用?

在Firebird中我们有PLAN,但是非常弱,因为很多时候为了查看一个简单的错误,必须运行很长的查询。

致以最诚挚的问候,

Mauro H. Leggieri

6 个答案:

答案 0 :(得分:19)

Oracle

EXPLAIN PLAN FOR SELECT …

PostgreSQL

EXPLAIN SELECT …

SQL Server

SET SHOWPLAN_XML ON

GO

SELECT …

GO

答案 1 :(得分:4)

对于mssql服务器,您可以使用

SET SHOWPLAN_TEXT ON and SET SHOWPLAN_TEXT OFF

这会阻止查询实际被执行,但会返回查询计划。

对于oracle,您可以使用

SET AUTOTRACE ON or EXPLAIN PLAN

(我不知道火鸟或者ingres)

答案 2 :(得分:3)

Oracle 中,我们有

EXPLAIN PLAN for sql

http://www.adp-gmbh.ch/ora/explainplan.html

MS SQL Server 中,您可以获得执行计划的文本或XML版本。

SET SHOWPLAN_XML ON|OFF
SET SHOWPLAN_TEXT ON|OFF

但是,最好使用Sql Server Management Studio / TOAD中的可视化工具查看这些内容。

http://msdn.microsoft.com/en-us/library/ms176058.aspx

其他非常方便的东西是

SET STATISTICS IO ON|OFF

答案 3 :(得分:3)

对于Ingres,以下内容将为您提供所选择的最终计划,其中包含行数,磁盘IO和CPU周期的估计值:

set qep

要获得计划但不执行SELECT也添加

set optimizeonly

重新启用查询执行:

set nooptimizeonly

获取已执行查询的实际统计信息,与“set qep”的输出进行比较:

set trace point qe90

有关上述内容的详情,请参阅http://docs.ingres.com/Ingres/9.2/SQL%20Reference%20Guide/set.htm

答案 4 :(得分:0)

MS SQL在Management Studio中有一个实用程序,在执行查询时称为显示执行计划(Estimated and Exact)。它还可以显示查询的统计信息(运行时间,行数,流量等)

答案 5 :(得分:0)

对于Ingres,请参阅以下资源:

Example of Reading and Interpreting a Query Execution Plan (QEP) [pdf]

一个简短的案例研究,展示了对QEP的分析和解释

Getting Ingres Qep LockTrace Using JDBC

The Query Execution Plan (QEP)