0Pricing
SQL Academy · บทเรียน

การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ

เขียนคำสั่งค้นหาที่ใช้ประโยชน์จากการตัดส่วนพาร์ทิชัน และตรวจสอบการตัดส่วนด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุผลที่ต้องแบ่งพาร์ทิชัน: การตัดส่วนและการดูแลรักษา
  2. การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช
  3. การถอดและแนบพาร์ทิชัน
  4. การค้นหาข้ามพาร์ทิชันอย่างมีประสิทธิภาพ
← กลับไปที่ SQL Academy