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

การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช

เลือกกลยุทธ์การแบ่งพาร์ทิชันที่เหมาะสม: แบบช่วงสำหรับข้อมูลอนุกรมเวลา แบบรายการสำหรับผู้เช่า และแบบแฮชสำหรับการกระจายอย่างสม่ำเสมอ

การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

การแบ่งพาร์ทิชันตามช่วงค่า

แต่ละพาร์ทิชันครอบคลุมช่วงค่าที่ต่อเนื่องกัน วิธีนี้มักใช้กับข้อมูลอนุกรมเวลา:

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_q1 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
  FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

ขอบเขตของช่วงเป็นแบบเปิดครึ่งหนึ่ง

FROM รวมค่าในขอบเขต แต่ TO ไม่รวมค่าในขอบเขต ขอบเขตจึงต่อกันได้พอดี ไม่มีค่าซ้ำซ้อนและไม่มีช่องว่าง

การแบ่งพาร์ทิชันตามรายการ

แต่ละพาร์ทิชันเก็บค่าเฉพาะ:

CREATE TABLE customers (
  id BIGSERIAL,
  country TEXT NOT NULL,
  name TEXT
) PARTITION BY LIST (country);

CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;

พาร์ทิชัน DEFAULT

ใช้รองรับแถวที่ไม่ตรงกับพาร์ทิชันอื่น หากไม่มีพาร์ทิชันนี้ INSERT ของแถวที่ไม่ตรงกับพาร์ทิชันใดจะล้มเหลว

การแบ่งพาร์ทิชันแบบแฮช

แถวจะถูกกระจายโดยแฮชคีย์สำหรับแบ่งพาร์ทิชัน เหมาะเมื่อคุณต้องการการกระจายที่สม่ำเสมอ แต่ไม่มีช่วงหรือรายการตามธรรมชาติ:

CREATE TABLE sessions (
  id UUID,
  user_id BIGINT,
  data JSONB
) PARTITION BY HASH (user_id);

CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);

การเลือกกลยุทธ์

  • Range — อนุกรมเวลาและรหัสที่เพิ่มขึ้นอย่างต่อเนื่อง
  • List — ผู้เช่า ประเทศ หรือระดับข้อมูลที่มีการใช้งานสูง
  • Hash — เมื่อไม่มีการกระจายที่เอนเอียงตามธรรมชาติ และต้องการเพียงการทำงานแบบขนาน

การแบ่งพาร์ทิชันย่อย

พาร์ทิชันสามารถถูกแบ่งพาร์ทิชันต่อได้อีกหลายระดับ:

CREATE TABLE events_2024 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
  PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.

ดัชนีบนตารางที่แบ่งพาร์ทิชัน

ดัชนีบนตารางแม่จะส่งต่อไปยังพาร์ทิชันทั้งหมดโดยอัตโนมัติ ข้อจำกัด UNIQUE ต้องมีคีย์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย:

CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.

ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.

คีย์หลักและพาร์ทิชัน

PRIMARY KEY ของตารางที่แบ่งพาร์ทิชันต้องมีคอลัมน์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย นี่เป็นข้อจำกัดพื้นฐานของการแบ่งพาร์ทิชันเชิงประกาศ

การเพิ่มและลบพาร์ทิชัน

การดำเนินการที่มีต้นทุนต่ำ:

CREATE TABLE events_2024_q3 PARTITION OF events
  FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');

DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.

การสร้างพาร์ทิชันโดยอัตโนมัติ

Postgres ไม่สร้างพาร์ทิชันในอนาคตโดยอัตโนมัติ วิธีแก้ปัญหาที่ใช้กันทั่วไป:

  • ส่วนขยาย pg_partman — จัดการพาร์ทิชันรายเดือน
  • งานตามกำหนดเวลาที่ใช้ CREATE เพื่อสร้างพาร์ทิชันถัดไป

คีย์ต่างประเทศ

FK ที่อ้างอิงตารางที่แบ่งพาร์ทิชันต้องใช้ PG 12 ขึ้นไป ส่วน FK จากตารางที่แบ่งพาร์ทิชันไปยังตารางปกติทำงานได้ตามปกติ

สรุป

กลยุทธ์การแบ่งพาร์ทิชันสามรูปแบบครอบคลุมกรณีส่วนใหญ่

  • Range สำหรับข้อมูลตามเวลาและข้อมูลตามลำดับ
  • List สำหรับชุดค่าที่แยกจากกัน
  • Hash สำหรับการกระจายอย่างสม่ำเสมอ
  • PK ต้องมีคอลัมน์สำหรับแบ่งพาร์ทิชันรวมอยู่ด้วย

ตรวจสอบความเข้าใจ

คุณต้องการแบ่งตาราง sessions ตาม user_id ให้ข้อมูลกระจายอย่างสม่ำเสมอและไม่มีลำดับตามธรรมชาติ ควรใช้กลยุทธ์ใด

คำถามที่พบบ่อย

บทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช”

เลือกกลยุทธ์การแบ่งพาร์ทิชันที่เหมาะสม: แบบช่วงสำหรับข้อมูลอนุกรมเวลา แบบรายการสำหรับผู้เช่า และแบบแฮชสำหรับการกระจายอย่างสม่ำเสมอ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การแบ่งพาร์ทิชันแบบช่วง รายการ และแฮช” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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