Filtrování pomocí WHERE

Optimalizace výkonu dotazů v PostgreSQL

Amy McCarty

Instructor

Omezení dat

Pořadí Klauzule Účel
1 FROM určuje zdrojovou tabulku
2 WHERE filtruje záznamy

 

  • Provede se brzy
  • Méně záznamů
Optimalizace výkonu dotazů v PostgreSQL

EXPLAIN

EXPLAIN
SELECT * FROM phones

 

Seq Scan on phones (cost = 0.00..22.7
                    ,rows=1270
                    ,width=36)
  • Počet kroků vykonání

Plánovač dotazů

Více kuchařů kolem velkého hrnce

Optimalizace výkonu dotazů v PostgreSQL

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

Plánovač dotazů

Více kuchařů kolem velkého hrnce

Optimalizace výkonu dotazů v PostgreSQL

Dobré – filtrování podobných hodnot pomocí 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))
Optimalizace výkonu dotazů v PostgreSQL

Lepší – filtrování podobných hodnot pomocí 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[]))
Optimalizace výkonu dotazů v PostgreSQL

Dobré – filtrování přesných hodnot pomocí 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))
Optimalizace výkonu dotazů v PostgreSQL

Lepší – filtrování přesných hodnot pomocí 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[]))
Optimalizace výkonu dotazů v PostgreSQL

Nejlepší – filtrování číselných hodnot

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[]))
Optimalizace výkonu dotazů v PostgreSQL

Shrnutí nejlepších filtrů WHERE

 

Výhody číselných hodnot

  • Kratší délka
  • Menší úložiště
  • Vyšší výkon
Optimalizace výkonu dotazů v PostgreSQL

Shrnutí nejlepších filtrů WHERE

 

Výhody číselných hodnot

  • Kratší délka
  • Menší úložiště
  • Vyšší výkon

 

Dobré Lepší
Text Číslo
OR IN, ARRAY
Optimalizace výkonu dotazů v PostgreSQL

Lass uns üben!

Optimalizace výkonu dotazů v PostgreSQL

Preparing Video For Download...