PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak mogę napisać to zapytanie postgres w Amazon redshift tak, aby było tak zoptymalizowane, jak w postgresie?

Optymalizacja zapytań Redshift pochodzi z klastra, projektowania tabel, ładowania danych, odkurzania danych i analizy nad tabelą.

Pozwolę sobie odpowiedzieć na kilka kluczowych punktów z powyższej listy.1. Upewnij się, że twoja tabela mytable, detail, klient ma prawidłowy SORT_KEY, DIST_KEY2. Upewnij się, że wszystkie Twoje stoły w dołączeniu są odpowiednio przeanalizowane i odkurzone.

Oto kolejna wersja tego samego SQL napisana w formacie Redshift.

Kilka wprowadzonych przeze mnie poprawek to

  1. Użyto „z klauzulą” do zoptymalizowanego obliczania poziomu klastra
  2. Użyte połączenia we właściwy sposób i upewnij się, że połączenie lewe/prawe ma znaczenie w oparciu o dane.
  3. Używany zakres_dat z tabelą klauzul dla rodzaju orientacji obiektu.
  4. Użyto Grupuj według w głównym SQL poniżej.

Moja wersja Redshift SQL

/** Date Range Computation **/
with date_range as (
    select ( current_Date - interval '2 weeks' ) as two_weeks
),
/** Filter main ResultSet**/
myGroupSet as (
    SELECT b.val AS myGroup,
           c.username,
           a.someCode,
           a.timeTaken,
           (case when (b.name == 'name1') THEN b.val::INTEGER ELSE 0 END ) as name11,
           (case when (b.name == 'name2') THEN b.val::INTEGER ELSE 0 END ) as name12
      FROM database.myTable a,
      join date_range dr on a.date > dr.two_weeks
      join database.detail b on b.id = a.id
      join database.client c on c.c_id = a.c_id
     where a.date > current_Date - interval '2 weeks'
)
/** Apply Aggregation **/
select myGroup, username, someCode, timeTaken, date,
       sum(name1), sum(name2)
  from myGroupSet
  group by myGroup, username, someCode, timeTaken, date



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zaproponuj narzędzie postgres, aby znaleźć różnicę między schematem a danymi

  2. Znajdź rodzica rekurencyjnie za pomocą Query

  3. Jak uzyskać tekst SQL z wyzwalacza zdarzenia Postgres?

  4. TimescaleDB:sprawnie wybierz ostatni wiersz

  5. Psycopg / Postgres :Połączenia kończą się losowo