Penyaringan di klausa WHERE

Meningkatkan Performa Kueri di PostgreSQL

Amy McCarty

Instructor

Batasi data

Urutan Klausa Tujuan
1 FROM menunjukkan tabel
2 WHERE memfilter atau membatasi rekaman

 

  • Terjadi lebih awal
  • Lebih sedikit rekaman
Meningkatkan Performa Kueri di PostgreSQL

EXPLAIN

EXPLAIN
SELECT * FROM phones

 

Seq Scan on phones (cost = 0.00..22.7
                    ,rows=1270
                    ,width=36)
  • Jumlah langkah eksekusi

Perencana kueri

Beberapa koki di sekitar panci besar

Meningkatkan Performa Kueri di PostgreSQL

EXPLAIN dengan 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)

Perencana kueri

Beberapa koki di sekitar panci besar

Meningkatkan Performa Kueri di PostgreSQL

Baik - Menyaring nilai serupa dengan LIKE OR

negara kode_telepon reliabilitas
Chad 235 sedang
China 86 tinggi
Kosta Rika 506 tinggi
India 91 sedang
Indonesia 62 sedang
Irak 964 rendah
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))
Meningkatkan Performa Kueri di PostgreSQL

Lebih baik - Menyaring nilai serupa dengan LIKE ANY

negara kode_telepon reliabilitas
Chad 235 sedang
China 86 tinggi
Kosta Rika 506 tinggi
India 91 sedang
Indonesia 62 sedang
Irak 964 rendah
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[]))
Meningkatkan Performa Kueri di PostgreSQL

Baik - Menyaring nilai tepat dengan OR

negara kode_telepon reliabilitas
Chad 235 sedang
China 86 tinggi
Kosta Rika 506 tinggi
India 91 sedang
Indonesia 62 sedang
Irak 964 rendah
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))
Meningkatkan Performa Kueri di PostgreSQL

Lebih baik - Menyaring nilai tepat dengan IN

negara kode_telepon reliabilitas
Chad 235 sedang
China 86 tinggi
Kosta Rika 506 tinggi
India 91 sedang
Indonesia 62 sedang
Irak 964 rendah
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[]))
Meningkatkan Performa Kueri di PostgreSQL

Terbaik - Penyaringan untuk angka

negara kode_telepon reliabilitas
Chad 235 sedang
China 86 tinggi
Kosta Rika 506 tinggi
India 91 sedang
Indonesia 62 sedang
Irak 964 rendah
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[]))
Meningkatkan Performa Kueri di PostgreSQL

Ringkasan filter WHERE terbaik

 

Keunggulan numerik

  • Lebih pendek
  • Penyimpanan lebih kecil
  • Mempercepat kinerja
Meningkatkan Performa Kueri di PostgreSQL

Ringkasan filter WHERE terbaik

 

Keunggulan numerik

  • Lebih pendek
  • Penyimpanan lebih kecil
  • Mempercepat kinerja

 

Baik Lebih baik
Teks Numerik
OR IN, ARRAY
Meningkatkan Performa Kueri di PostgreSQL

Ayo berlatih!

Meningkatkan Performa Kueri di PostgreSQL

Preparing Video For Download...