ลักษณะการทำงานของรั้วการปรับให้เหมาะสมของ CTE (ด้วยแบบสอบถาม) ระบุไว้ในมาตรฐาน SQL: 2008 หรือไม่ ถ้าเป็นเช่นนั้นอยู่ที่ไหน


23

ฉันเห็นการอ้างอิงบ่อย ๆ กับWITHแบบสอบถาม (นิพจน์ตารางทั่วไปหรือ CTE) ซึ่งทำหน้าที่เป็นรั้วการเพิ่มประสิทธิภาพซึ่งเซิร์ฟเวอร์ไม่ได้รับอนุญาตให้ส่งตัวกรองลงในการสืบค้น CTE ดึงการแสดงออกทั่วไปออกมาจาก CTE เป็นต้นมันมักอ้างว่า เพื่อให้เป็นพฤติกรรมที่กำหนดโดยมาตรฐาน SQL

CTEs มีแน่นอนรั้วการเพิ่มประสิทธิภาพใน PostgreSQL ... แต่นี้ต้องตามมาตรฐานหรือรายละเอียดการดำเนินงานจริงเพียง?

ตัวอย่างเช่นการโพสต์รายชื่อผู้รับจดหมายเหล่านี้อ้างสิทธิ์หรือแนะนำว่าเป็นมาตรฐาน:

หลังจากพูดถึงมันในความคิดเห็นฉันถูกถามว่ามีการระบุไว้ที่ไหนและหลังจากดูที่ร่างฉบับเดียวของ SQL: 2008 ฉันสามารถเข้าถึงฉันไม่ได้โชคดีมากที่ได้พบมัน

ฉันยังไม่ได้ศึกษามาตรฐานอย่างเข้มข้นดังนั้นฉันหวังว่าจะได้รับคำแนะนำจากใครบางคนที่: การฟันดาบการเพิ่มประสิทธิภาพของ CTEs ใน PostgreSQL นั้นเป็นสิ่งจำเป็นตามมาตรฐานหรือไม่ และถ้าเป็นเช่นนั้นมันอยู่ที่ไหนระบุ? หรือข้อความที่อยู่ในรายชื่อผู้รับจดหมายของ Pg มีข้อผิดพลาดหรือไม่?

ดูเพิ่มเติมที่รั้วการปรับให้เหมาะสมเธรดCTE ในรายการสิ่งที่ต้องทำ? .

คำตอบ:


10

ฉันคิดว่ามันเป็นรายละเอียดการใช้งาน

การใช้งานที่สอดคล้องกันไม่จำเป็นต้องดำเนินการตามลำดับที่แน่นอนของการดำเนินการที่กำหนดไว้ในกฎทั่วไปซึ่งมีผลต่อ SQL-data และสกีมาบนพารามิเตอร์โฮสต์และตัวแปรโฮสต์และพารามิเตอร์ SQL และตัวแปร SQL จะเหมือนกับผลกระทบของสิ่งนั้น ลำดับ. ใช้คำนี้อย่างมีประสิทธิภาพเพื่อเน้นการกระทำที่อาจเกิดผลกระทบในรูปแบบอื่นโดยการนำไปปฏิบัติ 1

ฉันคิดว่าผู้ดำเนินการสามารถประเมินนิพจน์ตารางทั่วไปได้ 20 ครั้งถึงแม้ใน 20 วิธีที่แตกต่างกันและยังคงมีการนำไปใช้ที่สอดคล้องกัน ปัญหาที่เกี่ยวข้องเพียงอย่างเดียวคือ "ผลกระทบของมัน ... เหมือนกันกับผลกระทบ" ของลำดับของการกระทำที่กำหนดไว้ในกฎทั่วไป

[1] ส่วน 6.3.3.3 "ลำดับการประเมินกฎ" ในร่างมาตรฐาน SQL 2008 โดยมีชื่อไฟล์ในเครื่อง 5CD2-01-Framework-2006-01.pdf, p. 41 ฉันมีไม่มีความคิดที่ผมได้รับมัน Google อาจรู้


2
ความรู้สึก makese - และเนื่องจาก PostgreSQL จะอนุญาตให้ใช้ฟังก์ชันที่มีผลข้างเคียงหรือคำสั่งการปรับเปลี่ยนข้อมูลใน CTEs จึงต้องปิดกั้น CTE ดังกล่าว ฉันเดาว่าหมายความว่าจะมีอิสระในการ CTE แบบอินไลน์ที่โทรเท่านั้นSTABLEหรือIMMUTABLEฟังก์ชั่น
Craig Ringer

ฉันคิดว่า CTE ที่เขียนได้ยังไม่ได้อยู่ในมาตรฐาน SQL แต่ฉันก็ไม่แน่ใจ
Mike Catrill 'Cat Recall'

wCTEs เป็นส่วนเสริม PostgreSQL อย่างแน่นอน มีความชัดเจนน้อยกว่าถ้าฟังก์ชันที่เรียกใช้ DML นั้นเป็นเพราะฟังก์ชั่นที่ผู้ใช้กำหนดใน SQL SQL/PSMซึ่ง Pg ไม่รองรับเลย ...
Craig Ringer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.