방금 내 사이트 http://sqlfiddle.com 에서 사용자가 쿼리에 대한 원시 실행 계획을 볼 수 있는 기능을 출시했습니다 . PostgreSQL, MySQL 및 Oracle의 경우 원시 실행 계획 출력을 보면 이해할 수있는 것으로 보입니다. 그러나 SQL Server (으로 생성 SET SHOWPLAN_XML ON
) 의 실행 계획 출력을 살펴보면 비교적 간단한 쿼리의 경우에도 처리해야 할 XML이 엄청나게 많습니다. 다음은이 'fiddle'에 대한 마지막 쿼리의 실행 계획에서 가져온 예입니다. 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/ 의 쿼리를 살펴 보았다 . 어떻게 구할 수 있습니까?! 대단해! 그들이 사내에서 빌드 한 내부 스택 스택 전용 라이브러리가 아닌 것이기를 바라고 있습니다. 누구 알아?
업데이트 2
방금이 프로젝트에서 XSLT를 사용하여 실행 계획 XML의 멋진 HTML + CSS + JS보기를 시작했습니다. http://code.google.com/p/html-query-plan/ (지금의 경우를 볼 수 있습니다 위의 원래 링크를 방문하십시오.)
나는이 프로젝트의 저자 ( /dba//users/5996/justin )가이 질문에 답하기 위해 나타나는지 기다릴 것이므로, 그에게 정당한 크레딧을 줄 수 있습니다. 내가 잠시 후에 그가 튀어 나오는 것을 보지 않는다면, 나는 행복하게 Martin에게 신용을 주거나 심지어는 실패하더라도, 나는 그것을 스스로 대답 할 것입니다. 저스틴과 마틴 감사합니다!