我刚刚在我的站点http://sqlfiddle.com上推出了一个功能,允许用户查看其查询的原始执行计划。在PostgreSQL、MySQL和(某种程度上)甲骨文的例子中,查看原始执行计划输出似乎是可以理解的。但是,如果您查看Server的执行计划输出(使用SET SHOWPLAN_XML ON生成),就会发现有大量的XML需要处理,甚至对于相对简单的查询也是如此。下面是一个示例(取自最后一个查询的执行计划:http://sqlfiddle.com/#!3/1fa93/1):
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96">
<StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/>
<QueryPlan CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="72">
<RelOp NodeId="0" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="3" EstimateIO="0.003125" EstimateCPU="0.0001603" AvgRowSize="42" EstimatedTotalSubtreeCost="0.0032853" TableCardinality="3" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
<OutputList>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="id"/>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="type"/>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="details"/>
</OutputList>
<IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="id"/>
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="type"/>
</DefinedValue>
<DefinedValue>
<ColumnReference Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Column="details"/>
</DefinedValue>
</DefinedValues>
<Object Database="[db_1fa93]" Schema="[dbo]" Table="[supportContacts]" Index="[PK__supportC__3213E83F7F60ED59]" IndexKind="Clustered"/>
</IndexScan>
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>我使用此函数的目的是为用户提供一些有意义的信息,以分析其查询性能(例如,与其他可能的查询实现方法进行比较)。然而,我现在担心的是,我向用户提供了太多的数据。我得想办法让这个有用。
我的一个想法是构建一个简单的机制,将输出下载为一个.sqlplan文件,这样他们就可以用SSMS打开它,并在那里以图形的方式查看它。不过,如果有另一种合理的选择,我宁愿不必依赖拥有这样的外部工具的用户。
我的另一个想法是使用某种XSLT转换,它可以提取并很好地呈现最重要的部分。不过,这听起来像是一堆工作,而且似乎没有任何好的文档来说明我是如何开始这样做的。有人知道使用此模式的现有XSLT模板吗?
还有其他想法吗?
好的,我只是看了一下“执行计划”选项卡来查询http://data.stackexchange.com/。我怎么能拿到?!太棒了!我希望这不是他们内部建立的一些内部到堆栈交换的库。有人知道吗?
我刚刚从这个项目中使用XSLT推出了显示计划XML的令人敬畏的HTML+CSS+JS视图:http://code.google.com/p/html-query-plan/ (如果您访问上面的原始链接,现在可以看到它)。
我将拭目以待,看看这个项目( https://dba.stackexchange.com/users/5996/justin )的作者是否会出现来回答这个问题,这样我就能给他适当的信任。如果过一段时间我没有看到他来,我会很高兴地把功劳归功于马丁,否则,我会亲自回答。谢谢贾斯汀和马丁!
发布于 2012-03-12 09:24:23
首先,我只想说-漂亮的网站:)
这类事情正是我为XSLT编写的--我很高兴其他人发现它很有用!
我不得不承认我之前写过的一些东西,然后就有了一些侧面的东西,我已经计划了一些改进,现在我希望能尽快实现。
一些链接:
如果你有任何改进的建议,请告诉我!
https://dba.stackexchange.com/questions/14727
复制相似问题