ฉันเพิ่งเปิดตัวฟีเจอร์บนเว็บไซต์ของฉันที่http://sqlfiddle.comซึ่งอนุญาตให้ผู้ใช้ดูแผนปฏิบัติการแบบดิบสำหรับการสืบค้น ในกรณีของ PostgreSQL, MySQL และ (ในระดับหนึ่ง) Oracle การดูผลลัพธ์ของแผนการดำเนินการดิบนั้นสามารถเข้าใจได้ อย่างไรก็ตามหากคุณดูผลลัพธ์ของแผนการดำเนินการสำหรับ SQL 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/ http://data.stackexchange.com/ฉันจะได้รับได้อย่างไร! มันยอดเยี่ยมมาก! ฉันหวังว่านี่ไม่ใช่ห้องสมุดภายในสู่สแต็กเท่านั้นที่พวกเขาสร้างขึ้นเอง ใครรู้บ้าง
อัปเดต 2
ฉันเพิ่งเปิดตัวมุมมอง HTML + CSS + JS ที่ยอดเยี่ยมของ showplan XML โดยใช้ XSLT จากโครงการนี้: http://code.google.com/p/html-query-plan/ (คุณสามารถดูได้ทันทีหาก คุณเยี่ยมชมลิงค์เดิมด้านบน)
ฉันจะรอดูว่าผู้เขียนโครงการนี้ ( /dba//users/5996/justin ) ปรากฏขึ้นเพื่อตอบคำถามนี้หรือไม่ดังนั้นฉันจึงสามารถให้เครดิตที่เหมาะสมแก่เขาได้ ถ้าฉันไม่เห็นเขาปรากฏขึ้นหลังจากนั้นฉันจะให้เครดิตกับ Martin อย่างมีความสุขหรือถ้าไม่ทำอย่างนั้นฉันก็จะตอบเอง ขอบคุณ Justin และ Martin!