Lọc với mệnh đề WHERE

Cải thiện hiệu năng truy vấn trong PostgreSQL

Amy McCarty

Instructor

Giới hạn dữ liệu

Order Clause Purpose
1 FROM chỉ định bảng
2 WHERE lọc hoặc giới hạn bản ghi

 

  • Xảy ra sớm
  • Ít bản ghi hơn
Cải thiện hiệu năng truy vấn trong PostgreSQL

EXPLAIN

EXPLAIN
SELECT * FROM phones

 

Seq Scan on phones (cost = 0.00..22.7
                    ,rows=1270
                    ,width=36)
  • Số bước thực thi

Bộ lập kế hoạch truy vấn

Nhiều đầu bếp quanh một nồi lớn

Cải thiện hiệu năng truy vấn trong PostgreSQL

EXPLAIN với 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)

Bộ lập kế hoạch truy vấn

Nhiều đầu bếp quanh một nồi lớn

Cải thiện hiệu năng truy vấn trong PostgreSQL

Tốt - Lọc giá trị tương tự với 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))
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tốt hơn - Lọc giá trị tương tự với 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[]))
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tốt - Lọc giá trị chính xác với 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))
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tốt hơn - Lọc giá trị chính xác với 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[]))
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tốt nhất - Lọc số

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[]))
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tóm tắt bộ lọc WHERE tốt nhất

 

Ưu điểm của kiểu số

  • Ngắn hơn
  • Tốn ít lưu trữ
  • Tăng tốc hiệu năng
Cải thiện hiệu năng truy vấn trong PostgreSQL

Tóm tắt bộ lọc WHERE tốt nhất

 

Ưu điểm của kiểu số

  • Ngắn hơn
  • Tốn ít lưu trữ
  • Tăng tốc hiệu năng

 

Tốt Tốt hơn
Văn bản Số
OR IN, ARRAY
Cải thiện hiệu năng truy vấn trong PostgreSQL

Ayo berlatih!

Cải thiện hiệu năng truy vấn trong PostgreSQL

Preparing Video For Download...