การกรองข้อมูลด้วย WHERE

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

Amy McCarty

Instructor

จำกัดข้อมูล

ลำดับ คำสั่ง จุดประสงค์
1 FROM ระบุตารางที่ใช้
2 WHERE กรองหรือจำกัดระเบียน

 

  • ทำงานก่อน
  • ได้ระเบียนน้อยลง
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

EXPLAIN

EXPLAIN
SELECT * FROM phones

 

Seq Scan on phones (cost = 0.00..22.7
                    ,rows=1270
                    ,width=36)
  • จำนวนขั้นตอนการประมวลผล

Query planner

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

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

EXPLAIN ร่วมกับ WHERE

EXPLAIN
SELECT * FROM phones
WHERE phone_code = 235

 

Seq Scan on phones (cost = 0.00..25.8
                    ,rows=6,width=636)
  Filter: (phone_code=235)

Query planner

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

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

ดี - กรองค่าที่คล้ายกันด้วย LIKE OR

country phone_code reliability
Chad 235 medium
China 86 high
Costa Rica 506 high
India 91 medium
Indonesia 62 medium
Iraq 964 low
EXPLAIN
SELECT * FROM phones
WHERE country LIKE 'Ch%' 
  OR country LIKE 'In%'

 

Seq Scan on phones (cost = 0.00..29.05
                    ,rows=13,width=36)
  Filter: ((country~~'Ch%'::text)
           OR(country~~'In%'::text))
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ดีกว่า - กรองค่าที่คล้ายกันด้วย LIKE ANY

country phone_code reliability
Chad 235 medium
China 86 high
Costa Rica 506 high
India 91 medium
Indonesia 62 medium
Iraq 964 low
EXPLAIN
SELECT * FROM phones
WHERE country 
  LIKE ANY(ARRAY['Ch%','In%'])

 

Seq Scan on phones (cost = 0.00..25.88
                    ,rows=13,width=36)
  Filter: ((country~~ANY('{Ch%,In%}'
                          ::text[]))
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ดี - กรองค่าที่ตรงกันด้วย OR

country phone_code reliability
Chad 235 medium
China 86 high
Costa Rica 506 high
India 91 medium
Indonesia 62 medium
Iraq 964 low
EXPLAIN
SELECT * FROM phones
WHERE country = 'Chad' 
  OR country = 'China'

 

Seq Scan on phones (cost = 0.00..29.05
                    ,rows=13,width=36)
  Filter: ((country='Chad'::text)
           OR(country='China'::text))
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ดีกว่า - กรองค่าที่ตรงกันด้วย IN

country phone_code reliability
Chad 235 medium
China 86 high
Costa Rica 506 high
India 91 medium
Indonesia 62 medium
Iraq 964 low
EXPLAIN
SELECT * FROM phones
WHERE country IN ('Chad','China')

 

Seq Scan on phones (cost = 0.00..25.88
                    ,rows=13,width=36)
  Filter: ((country=ANY('{Chad,China}'
                          ::text[]))
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ดีที่สุด - กรองค่าตัวเลข

country phone_code reliability
Chad 235 medium
China 86 high
Costa Rica 506 high
India 91 medium
Indonesia 62 medium
Iraq 964 low
EXPLAIN
SELECT *
FROM phones
WHERE phone_code IN (235,86) 

 

Seq Scan on phones (cost = 0.00..25.88
                    ,rows=13,width=36)
  Filter: (phone_code=ANY('{235,86}'
                          ::integer[]))
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

สรุป WHERE filter ที่ดีที่สุด

 

ข้อดีของตัวเลข

  • ความยาวสั้นกว่า
  • ใช้พื้นที่จัดเก็บน้อยกว่า
  • ช่วยให้ประสิทธิภาพดีขึ้น
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

สรุป WHERE filter ที่ดีที่สุด

 

ข้อดีของตัวเลข

  • ความยาวสั้นกว่า
  • ใช้พื้นที่จัดเก็บน้อยกว่า
  • ช่วยให้ประสิทธิภาพดีขึ้น

 

ดี ดีกว่า
Text Numeric
OR IN, ARRAY
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

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

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

Preparing Video For Download...