Bazy danych

Witryna zawiera podstawowe informacje odnośnie funkcji w bazach danych takich jak MySQL i Oracle oraz podstawowe informacje dotyczące zapytań.

piątek, 24 kwietnia 2015

PostgreSQL i WITH

Nie wiem czy wiecie, ale PostgreSQL jest bardzo ciekawym silnikiem bazy danych. Zapewne większość z was korzysta głównie z bazy MySQL lub bazy Oracle jeżeli pracujemy w dużych korporacjach. Mi udało się trafić do firmy, która pracuje na PostgreSQL i nie żałuję swojego doświadczenia zdobytego właśnie z tym silnikiem.

Poniżej prosty przykład jak można użyć polecania WITH do budowania ciekawych wyników, zwiększania optymalności zapytań.

WITH to jest w skrócie okienko, które buduje nam zestaw danych przechowywany w pamięci

I tak np. możemy zbudować zapytanie

SELECT * FROM client WHERE ....

które użyjemy później

WITH klienci as (
SELECT * FROM client WHERE ...
)

SELECT * FROM zamowienia
INNER JOIN klienci on klienci.id = zamowienia.id_client

Zastanawia się pewnie ktoś po co to komu potrzebne skoro możemy użyć tutaj zwykłego JOINa

Racja, ale jeżeli w okienku mamy wiele tabel i wiele danych, albo okienek mamy kilka i jedno okienko korzysta z innego mamy już ciekawe rozwiązanie, np.

WITH zamowienia_cte as (
SELECT * FROM zamowienia WHERE date > '2015-01-01'
),
produkty as (
SELECT * FROM produkty WHERE id IN (SELECT id_product FROM zamowienia_cte
),
...
...
...
...

Jak widzicie w okienku produkty będziemy wyświetlać tylko te produkty, które występują w zamówieniach, Dodatkowo finalnie możemy skorzystać z wszystkich okienek przy wyświetlaniu danych, możemy budować JOINy itd.

Jeżeli zaczniecie używać komendy WITH na pewno zrozumiecie dokładniej sens jej działania, bowiem czasami warto ograniczyć z góry zakres danych używając np indeksu, niż robić JOINa do tabeli, bowiem czas wykonywania się znacznie wydłuża...

przekonacie się o tym używając EXPLAINa, ale o  nim napiszę innym razem.