คำถามติดแท็ก cte

อักษรย่อสำหรับนิพจน์ตารางทั่วไป แบบสอบถามย่อยชั่วคราวที่ใช้ซ้ำได้ซึ่งอาจเรียกซ้ำได้

3
ข้อแตกต่างระหว่าง WITH CTE และ WITH CTE (<column_name>) คืออะไร
ดังที่แสดงในการใช้ Common Table Expressionsบน MSDN คุณสามารถกำหนด CTE เป็น: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) และใช้มันเช่น: SELECT &lt;column_list&gt; FROM expression_name; สมมติว่าฉันมี 2 CTE ต่อไปนี้ with cte1 as( select name from Table1 ) with cte2(name) as( select name from Table1 ) แบบสอบถามส่งผลลัพธ์เดียวกันสำหรับ CTE ทั้งสองเนื่องจากแบบสอบถามภายในเหมือนกัน ข้อแตกต่างระหว่างสองสิ่งนี้คือcte2มีชื่อคอลัมน์ ( …

1
กฎใดที่กำหนดเมื่อ SQL Server ใช้ CTE เป็น "รั้วการปรับให้เหมาะสม"
ในขณะที่กลับมา Brent Ozar เผยแพร่โพสต์รายละเอียดบางส่วนของความแตกต่างระหว่าง SQL Server และ PostgreSQL: ความแตกต่างที่สำคัญสองประการระหว่าง SQL Server กับ PostgreSQL จุดแรก (“ CTE เป็นรั้วการเพิ่มประสิทธิภาพ”) จับตาของฉันเพราะเห็นได้ชัดว่าในตัวอย่างที่มีให้ SQL Server รวม CTE และแบบสอบถามหลักเข้าด้วยกันและปรับให้เป็นแบบสอบถามเดียว (ตรงข้ามกับพฤติกรรมตรงข้ามใน PostgreSQL) อย่างไรก็ตามพฤติกรรมนี้ดูเหมือนจะตรงกันข้ามกับตัวอย่างที่ฉันเห็นในบล็อกและคลาสฝึกอบรมอื่น ๆ ที่ SQL Server ใช้ CTE เป็นรั้วการปรับให้เหมาะสมซึ่งช่วยให้ใช้ดัชนีได้ดีขึ้นประสิทธิภาพที่ดีขึ้นเป็นต้นตัวอย่างเช่น วิธีที่ดีกว่าในการเลือกดาว ดังนั้นดูเหมือนว่า SQL Server จะ "ให้เกียรติ" CTE เป็นกรอบการเพิ่มประสิทธิภาพบางครั้ง มีทรัพยากรที่ดีใดบ้างที่บันทึกรายการเฉพาะของกรณีที่ทราบซึ่ง SQL Server จะให้เกียรติ CTE อย่างน่าเชื่อถือเป็นรั้วการเพิ่มประสิทธิภาพ (หรือพฤติกรรมที่ตรงกันข้าม)

1
ฉันจะ 'บอกใบ้' ความสำคัญของ CTE แบบเรียกซ้ำได้อย่างไร
ฉันใช้ CTE แบบเรียกซ้ำต่อไปนี้เป็นตัวอย่างขั้นต่ำ แต่โดยทั่วไปเครื่องมือเพิ่มประสิทธิภาพจะต้องใช้ค่าเริ่มต้นที่เป็น 'เดา' สำหรับ CTE แบบเรียกซ้ำ with recursive w(n) as ( select 1 union all select n+1 from w where n&lt;5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with recursive w(n) as ( select 1 union all select n+1 …

5
ความแตกต่างระหว่างมุมมองอินไลน์และด้วยคำสั่งย่อย?
มุมมองอินไลน์ช่วยให้คุณสามารถเลือกจากแบบสอบถามย่อยราวกับว่ามันเป็นตารางที่แตกต่างกัน: SELECT * FROM /* Selecting from a query instead of table */ ( SELECT c1 FROM t1 WHERE c1 &gt; 0 ) a WHERE a.c1 &lt; 50; ฉันเคยเห็นสิ่งนี้อ้างถึงโดยใช้คำต่าง ๆ : มุมมองอินไลน์, พร้อมด้วยข้อ, CTE และตารางที่ได้รับ สำหรับฉันดูเหมือนว่าพวกเขาเป็นไวยากรณ์เฉพาะของผู้ขายที่แตกต่างกันสำหรับสิ่งเดียวกัน นี่เป็นข้อสันนิษฐานที่ผิดหรือเปล่า? มีความแตกต่างทางเทคนิค / ประสิทธิภาพระหว่างสิ่งเหล่านี้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.