sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag skriva denna postgres-fråga i Amazon redshift så att den är lika optimerad som den var i postgres?

Redshift Query optimering kommer från Cluster, Table Design, DataLoading, Data Vacuuming &Analysing över tabellen.

Låt mig svara på några centrala beröringspunkter i listan ovan.1. Se till att din tabell, mytable, detail, client har korrekt SORT_KEY, DIST_KEY2. Se till att alla dina bord i join är analyserade och tömda ordentligt.

Här är en annan version av din SQL skriven i Redshift-format.

Några justeringar jag gjorde är

  1. Använde "With Clause" för optimerad klusternivåberäkning
  2. Använd går med på rätt sätt och se till att vänster/höger går med i ärenden baserat på data.
  3. Använde datumintervall med satstabell för typ av objektorientering.
  4. Används Group By i huvud-SQL nedan.

Min version av 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. Anslutningssträngsparametrar för Schema.ini

  2. Hur får man skillnaden mellan på varandra följande rader i MySQL?

  3. Vad är det bästa sättet att lagra koordinater (longitud/latitud, från Google Maps) i SQL Server?

  4. ORA-01843:inte en giltig månad