ทุกเรื่องของ joins

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

Amy McCarty

Instructor

ภาพรวมคอร์ส

  • โครงสร้างคิวรี รวมถึง joins, subqueries และตารางชั่วคราว
  • การจำกัดและรวมข้อมูล
  • คุณสมบัติการจัดเก็บข้อมูลและเครื่องมือเพิ่มประสิทธิภาพ
  • การวางแผนและประมวลผลคิวรี
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Query planner

Query

  • คำสั่ง SQL

พนักงานเสิร์ฟในร้านอาหาร

Query (execution) plan

  • ขั้นตอนจริงที่ดำเนินการ

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

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

Query planner

พนักงานเสิร์ฟกำลังนำอาหารมาเสิร์ฟ

พนักงานเสิร์ฟกำลังนำเครื่องดื่มมาเสิร์ฟ

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

 

Joins คืออะไร?

  • รวมหลายตารางเข้าด้วยกัน
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

 

Joins คืออะไร?

  • รวมหลายตารางเข้าด้วยกัน

ทำไมต้องใช้ joins?

  • ตาราง lookup
  • รวมข้อมูล

ทำอย่างไร?

  • Inner และ outer

 

Sales ID Order Dt Amt Cust No
01 2019-02-02 145.30 911

 

ID Name Customer Since
911 Jim Smith 2019-01-01

 

Sales ID Order Dt Amt Name
01 2019-02-02 145.30 Jim Smith
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Inner joins

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Inner joins

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX โดยรายการสุดท้ายเป็นตัวหนา ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209 โดยรายการสุดท้ายเป็นตัวหนา

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

USING inner joins

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

USING inner joins

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX โดยรายการสุดท้ายเป็นตัวหนา ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209 โดยรายการสุดท้ายเป็นตัวหนา

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Left outer join

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Left outer join

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209 โดยรายการสุดท้ายเป็นตัวหนา

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Right outer join

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Right outer join

ตาราง athlete มี 4 รายการสำหรับนักกีฬาและประเทศ: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX โดยรายการสุดท้ายเป็นตัวหนา ตาราง country มี 4 รายการสำหรับรหัสประเทศ ชื่อ และประชากร (ล้านคน): AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Full outer join

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • Query (execution) plan

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

  • จำกัดการทำงานของ query planner
Athlete Nme Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
BRA Brazil 209
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

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

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

Preparing Video For Download...