การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ
เขียนคำสั่งค้นหาที่ใช้ประโยชน์จากการตัดส่วนพาร์ทิชัน และตรวจสอบการตัดส่วนด้วย EXPLAIN
การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
กรองด้วยคีย์พาร์ติชัน
การตัดพาร์ติชันจะทำงานก็ต่อเมื่อส่วนคำสั่ง WHERE มีคีย์พาร์ติชันอยู่ด้วย:
-- Prunes (uses date partitioning):
SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- No pruning — scans all partitions:
SELECT * FROM events WHERE user_id = 42;การตัดพาร์ติชันแบบประกอบ
ตัววางแผนสามารถตัดพาร์ติชันโดยใช้หลายคีย์ในตารางที่แบ่งพาร์ติชันหลายระดับได้:
SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01'
AND user_id = 42;
-- Prunes by date AND by hash partition.EXPLAIN แสดงการตัดพาร์ติชัน
ตรวจสอบแผนเพื่อยืนยันว่ามีการตัดพาร์ติชันเกิดขึ้น:
EXPLAIN SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Append
-- -> Seq Scan on events_2024_q1
-- Only Q1 partition shown; others pruned.การยกเว้นด้วยข้อจำกัดเทียบกับการตัดพาร์ติชัน
PG รุ่นปัจจุบันใช้ "การตัดพาร์ติชัน" ที่รวดเร็วเป็นค่าเริ่มต้น ส่วน "การยกเว้นด้วยข้อจำกัด" แบบเก่าจะช้ากว่า ตรวจสอบให้แน่ใจว่า enable_partition_pruning = on
การตัดพาร์ติชันขณะดำเนินการ
แม้ใช้คำสั่งที่มีพารามิเตอร์ (PREPARE) PG ก็สามารถตัดพาร์ติชันขณะดำเนินการได้:
PREPARE p(timestamptz, timestamptz) AS
SELECT * FROM events WHERE ts >= $1 AND ts < $2;
EXECUTE p('2024-03-01', '2024-04-01');
-- Pruning happens at execute, not at parse.ดัชนีข้ามพาร์ติชัน
ดัชนีจะถูกส่งต่อไปยังพาร์ติชันต่าง ๆ คำสั่งค้นหาบนคอลัมน์ที่มีดัชนีจะทำงานกับทุกพาร์ติชัน แต่ตัววางแผนจะสแกนดัชนีของแต่ละพาร์ติชัน
การรวมข้อมูลข้ามพาร์ติชัน
GROUP BY บนคีย์พาร์ติชันจะได้รับประโยชน์มากที่สุด ส่วน GROUP BY บนคอลัมน์อื่นจะสแกนทุกพาร์ติชัน
การดำเนินการแบบขนานแยกตามพาร์ติชัน
PostgreSQL สามารถดำเนินการสแกนพาร์ติชันต่าง ๆ แบบขนานได้ (PG 11 เป็นต้นไป):
SET max_parallel_workers_per_gather = 4;
EXPLAIN SELECT COUNT(*) FROM events;
-- Parallel Append over partitions.การรวมตารางที่แบ่งพาร์ติชัน
หากตารางที่แบ่งพาร์ติชันทั้งสองใช้คีย์พาร์ติชันร่วมกัน การ "รวมแบบแยกตามพาร์ติชัน" จะเร็วกว่า เพราะแต่ละพาร์ติชันจะถูกนำมารวมแยกกัน:
SET enable_partitionwise_join = on;
-- Now PG can join events to event_metrics partition-by-partition.หลีกเลี่ยงข้อผิดพลาดที่พบบ่อย
- อย่าใช้ฟังก์ชันกับคีย์พาร์ติชันใน WHERE เพราะจะทำให้การตัดพาร์ติชันใช้ไม่ได้
- อย่าลืมใส่คีย์พาร์ติชันในคำสั่งค้นหา
- อย่าแบ่งเป็นพาร์ติชันขนาดเล็กนับพัน เพราะค่าใช้จ่ายในการวางแผนจะกลายเป็นปัจจัยหลัก
จำนวนพาร์ติชันที่เหมาะสม
ตั้งเป้าให้มีพาร์ติชันตั้งแต่หลักสิบถึงหลักร้อยต้น ๆ ไม่ใช่หลักพัน แต่ละพาร์ติชันมีค่าใช้จ่ายในการวางแผน หากต้องการแบ่งย่อยมาก ควรแบ่งพาร์ติชันย่อยอีกชั้น
การบำรุงรักษาแยกตามพาร์ติชัน
VACUUM, ANALYZE และ REINDEX จะทำงานแยกในแต่ละพาร์ติชัน และสามารถทำงานแบบขนานได้ ประโยชน์จะเพิ่มขึ้นตามจำนวนพาร์ติชันที่มี ตราบใดที่ยังอยู่ในระดับเหมาะสม
สรุป
การแบ่งพาร์ติชันให้ประโยชน์กับคำสั่งค้นหาที่กรองด้วยคีย์พาร์ติชัน
- WHERE บนคีย์พาร์ติชัน → การตัดพาร์ติชัน
- ยืนยันด้วย EXPLAIN
- เปิดใช้การรวมแบบแยกตามพาร์ติชันสำหรับการรวมที่ใช้คีย์ตรงกัน
- อย่าแบ่งพาร์ติชันมากเกินไป
ตรวจสอบความเข้าใจ
คุณมี events ที่แบ่งพาร์ติชันตามเดือนโดยใช้ ts คำสั่งใดจะได้รับประโยชน์จากการตัดพาร์ติชัน
คำถามที่พบบ่อย
บทเรียน “การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ”
เขียนคำสั่งค้นหาที่ใช้ประโยชน์จากการตัดส่วนพาร์ทิชัน และตรวจสอบการตัดส่วนด้วย EXPLAIN คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ต้องแบ่งพาร์ทิชัน: การตัดส่วนและการดูแลรักษา
- การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช
- การถอดและแนบพาร์ทิชัน
- การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ