ความสามารถใหม่ของตัววางแผนคิวรีใน PostgreSQL 16
- PostgreSQL 16 ได้นำการปรับปรุงจำนวนมากเข้าสู่ตัววางแผนคิวรี ทำให้คิวรี SQL จำนวนมากทำงานได้เร็วกว่าเวอร์ชันก่อนหน้า
- แม้จะสามารถดูการปรับปรุงของตัววางแผนเหล่านี้ได้ในบันทึกประจำรุ่นของ PG16 แต่ในแต่ละรีลีสของ PostgreSQL มีการเปลี่ยนแปลงมากมาย จึงยากที่จะอธิบายรายละเอียดของแต่ละการเปลี่ยนแปลงได้ครบถ้วน
- โพสต์บล็อกนี้นำเสนอการวิเคราะห์เชิงลึกของการปรับปรุง 10 ประการในตัววางแผนคิวรีของ PostgreSQL 16 พร้อมเปรียบเทียบผลลัพธ์ของตัววางแผนระหว่าง PG15 และ PG16 และยกตัวอย่างสิ่งที่เปลี่ยนไป
การปรับปรุง 10 ประการของตัววางแผนคิวรีใน PostgreSQL 16
- Incremental Sort: Incremental Sort ซึ่งถูกนำมาใช้ครั้งแรกใน PostgreSQL 13 จะใช้ประโยชน์จากกรณีที่ชุดผลลัพธ์บางส่วนถูกจัดเรียงตามคอลัมน์นำหน้าอย่างน้อยหนึ่งคอลัมน์อยู่แล้ว เพื่อทำการจัดเรียงเฉพาะคอลัมน์ที่เหลือ
- Aggregates with Presorted Data: ตัววางแผนคิวรีของ PostgreSQL 16 พยายามสร้างแผนที่ป้อนแถวให้กับโหนด aggregate ตามลำดับที่จัดเรียงไว้แล้ว
- Memoize: โหนดแผน Memoize ซึ่งถูกนำมาใช้ครั้งแรกใน PostgreSQL 14 ทำงานเป็นชั้นแคชเพื่อหลีกเลี่ยงการค้นหาค่าซ้ำ
- Anti Join: PostgreSQL 16 ทำให้สามารถแฮชตารางที่มีขนาดเล็กกว่าได้เมื่อทำ anti join
- Parallel Hash Join: PostgreSQL 16 รองรับ parallel hash join สำหรับชนิดการ join แบบ FULL และ RIGHT
- Window Function Optimization: PostgreSQL 16 สามารถใช้ window function ที่เร็วกว่าได้เมื่อใช้โหมด ROWS เทียบกับโหมด RANGE
- Optimizations for Monotonic Window Functions: PostgreSQL 16 ขยายการเพิ่มประสิทธิภาพสำหรับ window function เช่น
ntile(), cume_dist(), percent_rank()
- Join Removal on Partitioned Tables: PostgreSQL 16 อนุญาตให้ใช้การเพิ่มประสิทธิภาพแบบลบ LEFT JOIN บนตารางพาร์ทิชัน
- Using Limit for DISTINCT Queries: ตัววางแผนคิวรีของ PostgreSQL 16 จะไม่ใส่โหนดแผนสำหรับลบค่าซ้ำในผลลัพธ์ หากสามารถตรวจจับได้ว่าทุกแถวมีค่าเดียวกัน
- Relaxed Rules for Merge Join: ตัววางแผนคิวรีของ PostgreSQL 16 เมื่อต้องพิจารณา Merge Join จะตรวจสอบว่าอย่างน้อยหนึ่งคอลัมน์นำหน้าถูกจัดเรียงอย่างถูกต้อง แทนที่จะต้องให้ลำดับของแถวตรงกันอย่างสมบูรณ์
ความเห็นของ GN⁺
- การปรับปรุงตัววางแผนคิวรีใน PostgreSQL 16 มีบทบาทสำคัญต่อการเพิ่มประสิทธิภาพของฐานข้อมูล โดยเฉพาะฟีเจอร์อย่าง Incremental Sort และ Memoize ที่ช่วยให้คิวรีซับซ้อนทำงานได้อย่างมีประสิทธิภาพมากขึ้น
- การปรับปรุงเหล่านี้จะมีประโยชน์อย่างมากต่อทั้งนักพัฒนาและผู้ดูแลฐานข้อมูลที่ใช้ PostgreSQL โดยเฉพาะในระบบที่ต้องจัดการข้อมูลขนาดใหญ่ ซึ่งจะสัมผัสได้ถึงประสิทธิภาพที่ดีขึ้น
- ความพยายามในการนวัตกรรมและการปรับปรุงอย่างต่อเนื่องของชุมชน PostgreSQL กำลังผลักดันความก้าวหน้าของเทคโนโลยีฐานข้อมูลโอเพนซอร์ส และมอบโซลูชันการจัดการข้อมูลที่ดียิ่งขึ้นให้กับผู้ใช้และองค์กร
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
explain.dalibo.comและwww.pgexplain.devเป็นเครื่องมือสำหรับแสดงภาพคิวรี โดยทั้งสองเครื่องมือให้ผลลัพธ์ที่คล้ายกันCREATE INDICES FOR <sql>นอกจากนี้ยังมีข้อเสนอเรื่องโหมดสร้างดัชนีอัตโนมัติสำหรับการพัฒนาและการใช้งานแบบโต้ตอบIS NOT DISTINCT FROMได้