การจัดเก็บแบบแถวและพาร์ติชัน

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Amy McCarty

Instructor

ประเภทการจัดเก็บข้อมูลในฐานข้อมูล

การจัดเก็บแบบแถว

  • คงความสัมพันธ์ระหว่างคอลัมน์

การจัดเก็บแบบคอลัมน์

  • คงความสัมพันธ์ระหว่างแถว
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

แบบแถว

การจัดเก็บแบบแถว

  • คงความสัมพันธ์ระหว่างคอลัมน์

 

id name species age habitat received
01 Bob panda 2 Asia 2018
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

แบบคอลัมน์

การจัดเก็บแบบคอลัมน์

  • คงความสัมพันธ์ระหว่างแถว  

ตารางสองชุด ชุดแรกแสดง id และชื่อ: 01 - Bob, 02 - Sunny, 03 - Beco, 04 - Coco ชุดที่สองแสดง id พร้อม species: 01 - panda, 02 - zebra, 03 - zebra, 04 - koala

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

การจัดเก็บแบบแถว

 

  • แต่ละแถวถูกจัดเก็บในตำแหน่งเดียวกัน
  • เพิ่มหรือลบระเบียนทั้งชุดได้รวดเร็ว
  • คืนค่าทุกคอลัมน์ได้รวดเร็ว
    • คืนค่าทุกแถวได้ช้ากว่า
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

การลดจำนวนแถว

ลดจำนวนแถว

  • WHERE filter
  • INNER JOIN
  • DISTINCT
  • LIMIT
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

วิธีการของฐานข้อมูลแบบแถว

Partitions

  • วิธีแบ่งตาราง (parent) หนึ่งตารางออกเป็นตารางย่อย (children) หลายตาราง

Indexes

  • วิธีสร้าง key คอลัมน์แบบเรียงลำดับเพื่อเพิ่มความเร็วในการค้นหา

 

การใช้ partitions และ indexes

  • ต้องตั้งค่าและดูแลรักษา
  • ทราบการมีอยู่ได้จาก database administrator หรือเอกสารประกอบ
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

โครงสร้างพาร์ติชัน

ตาราง parent ของสัตว์ในสวนสัตว์ 4 รายการ แสดง id, name, species, habitat และปีที่ได้รับ: 01 - Bob - Panda - age - habitat - received, 02 - Sunny - Zebra - 3 - Africa - 2018, 03 - Beco - Zebra - 10 - Africa - 2017, 04 - Coco - Macaw - 5 - South America - 2016 มีตาราง children 3 ชุดตาม habitat: ตาราง Asia มี Bob, ตาราง Africa มี Sunny และ Beco, ตาราง South America มี Coco

  • ตาราง parent
    • มองเห็นใน database front end
    • ใช้เขียน query
  • ตาราง children
    • ไม่แสดงใน database front end
    • ใช้ค้นหาเมื่อรัน query
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

โครงสร้างพาร์ติชัน

ตาราง parent ของสัตว์ในสวนสัตว์ 4 รายการ แสดง id, name, species, habitat และปีที่ได้รับ: 01 - Bob - Panda - age - habitat - received, 02 - Sunny - Zebra - 3 - Africa - 2018, 03 - Beco - Zebra - 10 - Africa - 2017, 04 - Coco - Macaw - 5 - South America - 2016 มีตาราง children 3 ชุดตาม habitat: ตาราง Asia มี Bob, ตาราง Africa มี Sunny และ Beco, ตาราง South America มี Coco โดยตาราง Africa ถูกไฮไลต์ด้วยกรอบสีแดง

SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ภาพรวมพาร์ติชัน

คืออะไร

  • การแบ่งตารางหนึ่งออกเป็นหลายตารางย่อย

ทำไมต้องใช้

  • จัดเก็บข้อมูลได้ยืดหยุ่นมากขึ้น
  • query ทำงานได้เร็วขึ้น

ใช้กับอะไร

  • คอลัมน์ที่ใช้กรองบ่อย
    • วันที่, สถานที่
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

การประเมิน query บน partition

Query planner

เชฟหลายคนรอบหม้อใบใหญ่

EXPLAIN
SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'

Query Plan

Seq Scan on zoo_animals  (cost=0.00..
17.70 rows=2 width=182)
  Filter: (state_code = 15)
  • ค่าประมาณต้นทุน (เวลา)
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

มาฝึกกันเถอะ!

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Preparing Video For Download...