แก้ไข:
โปรดดูความคิดเห็นของ Martin ด้านล่าง:
CTE ไม่ได้ปรากฏเป็นตารางในหน่วยความจำ มันเป็นเพียงวิธีการห่อหุ้มคำนิยามแบบสอบถาม ในกรณีของ OP มันจะ inlined SELECT Column1, Column2, Column3 FROM SomeTable
และเช่นเดียวเพียงแค่การทำ เวลาส่วนใหญ่ที่พวกเขาไม่ได้รับการปรากฏตัวขึ้นล่วงหน้าซึ่งเป็นสาเหตุที่ไม่มีผลตอบแทนแถวWITH T(X) AS (SELECT NEWID())SELECT * FROM T T1 JOIN T T2 ON T1.X=T2.X
ยังตรวจสอบแผนการดำเนินการ แม้ว่าบางครั้งมันเป็นไปได้ที่จะแฮ็คแผนเพื่อรับสปูล มีรายการเชื่อมต่อที่ขอคำแนะนำสำหรับสิ่งนี้ - Martin Smith 15 กุมภาพันธ์ 2555 เวลา 17:08 น
คำตอบเดิม
CTE
อ่านเพิ่มเติมเกี่ยวกับ MSDN
CTE สร้างตารางที่ใช้ในหน่วยความจำ แต่ใช้ได้เฉพาะกับแบบสอบถามเฉพาะที่ตามมา เมื่อใช้การสอบถามซ้ำนี่อาจเป็นโครงสร้างที่มีประสิทธิภาพ
คุณอาจต้องการพิจารณาใช้ตัวแปรตาราง ใช้เป็นตารางชั่วคราวและสามารถใช้งานได้หลายครั้งโดยไม่จำเป็นต้องมีการจัดรูปแบบใหม่สำหรับการเข้าร่วมแต่ละครั้ง นอกจากนี้หากคุณต้องการเก็บบันทึกไว้สองสามรายการในขณะนี้ให้เพิ่มอีกไม่กี่ระเบียนหลังจากเลือกถัดไปเพิ่มอีกไม่กี่ระเบียนหลังจาก op อื่นจากนั้นส่งคืนเพียงไม่กี่ระเบียนเท่านั้น ไม่จำเป็นต้องลดลงหลังจากดำเนินการ น้ำตาลส่วนใหญ่เป็นเพียงวากยสัมพันธ์ อย่างไรก็ตามถ้าคุณรักษาจำนวนแถวให้ต่ำมันจะไม่เกิดขึ้นกับดิสก์ ดูความแตกต่างระหว่างตัวแปร temp table กับ table table ใน SQL Server คืออะไร สำหรับรายละเอียดเพิ่มเติม
ตารางอุณหภูมิ
อ่านเพิ่มเติมเกี่ยวกับ MSDN - เลื่อนลงประมาณ 40% ของวิธีการ
ตาราง temp เป็นตารางที่สร้างขึ้นบนดิสก์อย่างแท้จริงเพียงแค่ในฐานข้อมูลเฉพาะที่ทุกคนรู้ว่าสามารถลบได้ มันเป็นความรับผิดชอบของนักพัฒนาที่ดีที่จะทำลายตารางเหล่านั้นเมื่อพวกเขาไม่ต้องการอีกต่อไป แต่ DBA ก็สามารถเช็ดพวกเขาได้เช่นกัน
ตารางชั่วคราวมีให้เลือกสองแบบ: ท้องถิ่นและทั่วโลก ในแง่ของ MS SQL Server คุณใช้การ#tableName
กำหนดสำหรับท้องถิ่นและการ##tableName
กำหนดสำหรับทั่วโลก (โปรดทราบการใช้หนึ่งหรือสอง # เป็นลักษณะการระบุ)
โปรดสังเกตว่าด้วยตาราง temp ซึ่งตรงข้ามกับตัวแปร table หรือ CTE คุณสามารถใช้ดัชนีและสิ่งที่คล้ายกันเนื่องจากตารางเหล่านี้เป็นตารางที่ถูกต้องตามกฎหมายในความหมายปกติของคำ
โดยทั่วไปฉันจะใช้ตาราง temp สำหรับแบบสอบถามที่ยาวกว่าหรือใหญ่กว่าและ CTEs หรือตัวแปร table หากฉันมีชุดข้อมูลขนาดเล็กอยู่แล้วและต้องการสคริปต์โค้ดเร็ว ๆ ประสบการณ์และคำแนะนำของผู้อื่นบ่งชี้ว่าคุณควรใช้ CTE ที่คุณมีจำนวนแถวที่คืนกลับมาเล็กน้อย หากคุณมีจำนวนมากคุณอาจได้รับประโยชน์จากความสามารถในการจัดทำดัชนีในตารางชั่วคราว