User Tools

Site Tools


wiki:postgres:pg_tune_kurs_agg

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

wiki:postgres:pg_tune_kurs_agg [2017/09/28 12:21] (current)
Line 1: Line 1:
 +====== Aggregierung bei Abfragen ======
  
 +===== Hash Aggregat =====
 +
 +Durchgehen und gleich mitzählen (z.B. wieviele '​Hans'​ gibt es in einer Spalte. Ist sinnvoll wenn z.B. nur zwei unterschiedliche Namen in der Tabelle stehen. Sonst muss sortiert werden.
 +
 +===== Group Aggregat =====
 +Eine sortierte Liste (z.B. von a-z) hat den Vorteil, daß wenn z.B. "​b"​ da ist, "​a"​ nie wieder kommen kann. Hat man keine sortierte Liste, muß man die ganze Ergebnismenge im Kopf behalten -> Hash ist viel billiger.
 +Siehe z.B. [[http://​www.postgres.cz/​index.php/​PostgreSQL_SQL_Tricks#​Slow_DISTINCT|PostgreSQL SQL Tricks]]\\
 +DISTINCT benötigt sortieren während GROUP BY Hash Aggregat verwenden kann.
 +
 +===== Explain Analyze =====
 +
 +  EXPLAIN ANALYZE ...
 +
 +Wird im Hintergrund ausgeführt und zählt mit.
 +  EXPLAIN (ANALYZE TRUE, BUFFERS TRUE, COSTS TRUE) SELECT ...
 +  .......
 +  written=171 ​ # auf Disk schreiben
 +
 +  test# SHOW work_mem
 +  32MB
 +  test# SET work_mem TO 50000000 ​  # in KB (~48GB - egal, ist für Query Planner)
 +\\
 +//EXPLAIN ANALYZE// zeigt an ob **external sort** (Sortierung läuft auf der Disk ab) oder **quicksort** (läuft im RAM ab).
 +Die //​work_mem//​ wird pro SELECT, insbesondere bei //ORDER BY//, //GROUP BY// verwendet. Der Default Wert ist 1MB, 64 MB ist o.k.
 +
 +  #​postgresql.conf
 +  work_mem = 64MB
 +
 +===== top-N heapsort =====
 +
 +... ORDER BY id DESC **LIMIT 10**;  # findet die 10 größten id's mit O(N), während sort O(Nlog(N)) ist.
wiki/postgres/pg_tune_kurs_agg.txt · Last modified: 2017/09/28 12:21 (external edit)