Commit 9276a01e authored by Marcel Huber's avatar Marcel Huber
Browse files

ColumnStore: updated conclusions again

parent 0dd3c7ca
......@@ -126,7 +126,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB tbd.
Vergleich:: Klarer Vorteil von MonetDB da nur zwei Spalten für die Ausgabe benötigt werden.
=====
endif::exercise_solution[]
{blank}
......@@ -157,7 +157,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch pkey-Index. tbd.
Vergleich:: Klarer Vorteil von PostgreSQL durch _covering Index_.
Der Plan von MonetDB zeigt, dass zur Selektion drei Spalten zusammengeführt werden müssen.
=====
endif::exercise_solution[]
{blank}
......@@ -188,7 +189,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch pkey-Index. tbd.
Vergleich:: Klarer Vorteil von PostgreSQL durch _covering Index_.
Der Plan von MonetDB zeigt, dass zur Selektion drei Spalten zusammengeführt werden müssen.
=====
endif::exercise_solution[]
{blank}
......@@ -219,7 +221,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch den _covering index_.
Vergleich:: Trotz _covering index_ von PostgreSQL ist MonetDB in diesem Fall schneller.
Eine detaillierte Betrachtung des Histogramm würde hier eventuell Klärung bringen.
=====
endif::exercise_solution[]
{blank}
......@@ -250,7 +253,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB vermutlich durch effizienteren Vergleich der Bedingung.
Vergleich:: Vorteil von MonetDB durch den vermutlich effizienteren Textvergleich.
=====
endif::exercise_solution[]
{blank}
......@@ -281,7 +284,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB aufgrund der Spaltenorientierung.
Vergleich:: Klarer Vorteil von MonetDB für die Selektion einer grösseren Resultatmenge.
Trotz _covering Index_ ist hier PostgreSQL im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -312,7 +316,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von PostgreSQL durch den _covering index_ in gewünschter Sortierung.
Vergleich:: Vorteil von MonetDB trotz _covering index_ von PostgreSQL.
=====
endif::exercise_solution[]
{blank}
......@@ -343,7 +347,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch den _covering index_ in gewünschter Sortierung.
Vergleich:: Vorteil von PostgreSQL durch den _covering index_ und die eingeschränkte Resultatmenge.
=====
endif::exercise_solution[]
{blank}
......@@ -374,7 +378,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Kleiner Vorteil von MonetDB trotz _covering index_ von PostgreSQL.
Vergleich:: Ähnliche Ausführungszeit der beiden Server.
Die Resultatmenge passt bei PostgreSQL vermutlich auch gerade in den Speicher.
=====
endif::exercise_solution[]
{blank}
......@@ -405,7 +410,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Kleiner Vorteil von PostgreSQL durch passenden _covering index_ und günstige Einschränkung am Ende.
Vergleich:: Trotz pssendem Index und günstiger Einschränkung der Resultatmenge ist PostgreSQL im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -440,6 +445,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB weil nur die passende Spalte bearbeitet werden muss.
Der _covering Index_ von PostgreSQL hilft zwar, kann aber nicht mit MonetDB mithalten.
=====
endif::exercise_solution[]
{blank}
......@@ -470,7 +476,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von PostgreSQL durch pkey-Index.
Vergleich:: Klarer Vorteil von PostgreSQL durch _primary key Index_.
=====
endif::exercise_solution[]
{blank}
......@@ -501,7 +507,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB von ca. 50%.
Vergleich:: Vorteil von MonetDB durch effizienten Textvergleich der `city` Spalte.
=====
endif::exercise_solution[]
{blank}
......@@ -532,7 +538,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB, vermutlich durch effizientere Aufbereitung der Daten im Speicher.
Vergleich:: Vorteil von MonetDB durch effizienten Textvergleich und der Aufbereitung der Daten im Speicher.
=====
endif::exercise_solution[]
{blank}
......@@ -563,7 +569,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch sortierte Ablage und Limit Bedingung.
Vergleich:: Klarer Vorteil von PostgreSQL durch sortierte Ablage der Zeilen und der Limit Bedingung.
=====
endif::exercise_solution[]
{blank}
......@@ -594,7 +600,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index
Vergleich:: Klarer Vorteil von PostgreSQL durch passenden Index.
MonetDB braucht hier länger um die Daten aller Spalten zusammenzufassen.
=====
endif::exercise_solution[]
{blank}
......@@ -625,7 +632,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB da PostgreSQL scheinbar einen Bitmap Scan durchführen muss.
Vergleich:: Vorteil von MonetDB obschon einige Spalten zusammengefasst werden müssen.
PostgreSQL macht zwar gebrauch vom Index, braucht aber vermutlich länger um die richtige Datapage zu lokalisieren.
=====
endif::exercise_solution[]
{blank}
......@@ -688,7 +696,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index mit optimaler Bedingung im Randbereich.
Vergleich:: Vorteil von PostgreSQL durch passenden Index und Einschränkung der `orderid`.
=====
endif::exercise_solution[]
{blank}
......@@ -719,7 +727,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index und Möglichkeit der Parallelisierung der Aggregation.
Vergleich:: Vorteil von MonetDB in der Aggregation weil nur eine Spalte herangezogen werden muss.
=====
endif::exercise_solution[]
{blank}
......@@ -750,7 +758,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB, vermutlich bedingt durch die adhoc Erstellung von Indexes aufgrund des vorangegangenen Query.
Vergleich:: Vorteil von MonetDB in der Aggreagation über zwei Spalen hinweg.
PostgreSQL nutzt zwar den Index, braucht aber länger um über alle Datapages hinweg die Daten zu aggregieren.
=====
endif::exercise_solution[]
{blank}
......@@ -781,7 +790,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index.
Vergleich:: Vorteil von PostgreSQL durch passenden Index und vor allem die Reduktion der durchsuchten Menge.
=====
endif::exercise_solution[]
{blank}
......@@ -814,8 +823,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL braucht trotz spezifischem `title` Index länger für die Suche.
Vergleich:: Die beiden Server brauchen ähnlich lange um die passenden Titel zu finden.
PostgreSQL gewinnt durch die Nutzung des `gist` Index Zeit, MonetDB braucht jedoch diese Zeit um alle Spalten zu konsolidieren.
=====
endif::exercise_solution[]
{blank}
......@@ -848,8 +857,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL braucht durch Abarbeitung der beiden sequential Scans mehr Zeit.
Vergleich:: Klarer Vorteil von MonetDB obschon einige Spalten von verschiedenen Tabellen konsolidiert werden müssen.
PostgreSQL nutzt die vorhandenen Indexe der Join Bedingung nicht und verliert durch die sequential Scans Zeit.
=====
endif::exercise_solution[]
{blank}
......@@ -911,8 +920,9 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB durch frühes Aussortieren der `orders` basierend auf der `customerid`.
Die Bedingung `o1.orderdate <> o2.orderdate` kann bei PostgreSQL nicht durch einen Index optimiert werden.
Vergleich:: MonetDB scheint mit _non-equi-joins_ im Vorteil zu sein.
Das liegt womöglich daran, dass für den Vergleich nur die Daten der Datumsspalte vorhanden sein müssen und diese in den Speicher passen.
PostgreSQL nutzt für die Reduktion der `customerid` zwar den Index, für den Vergleich des Datums muss aber jeweils die ganze Zeile in den Speicher geladen werden.
=====
endif::exercise_solution[]
{blank}
......@@ -943,7 +953,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB, PostgreSQL fehlt ein passender Index.
Vergleich:: Klarer Vorteil von MonetDB weil nur wenige Spalten in Frage kommen.
PostgreSQL nutzt die vorhanden Indexe nicht.
=====
endif::exercise_solution[]
{blank}
......@@ -974,7 +985,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB trotz Index bei PostgreSQL.
Vergleich:: Vorteil von MonetDB durch Lokalität der Daten.
Trotz Verwendung der Indexe ist PostgreSQL hier ein wenig im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -1005,8 +1017,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB da die gesuchten Daten noch in den Speicher passen.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1037,8 +1049,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB da die gesuchten Daten noch in den Speicher passen.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1069,8 +1081,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB obschon die Ausführungszeit mit dieser aufwändigen Join Bedingung gewachsen ist.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1101,8 +1113,9 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Scheinbar passen die Daten der temporären Tabelle zum Vorteil von MonetDB gut in den Speicher.
Dadurch bleibt die Ausführungszeit trotz komplizierter Aufbereitung gering.
PostgreSQL nutzt zwar einen Index der Products Tabelle, muss aber die temporäre Tabelle `orderlines_to_products_eleven` sequentiell durchstöbern.
=====
endif::exercise_solution[]
{blank}
......@@ -1134,7 +1147,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL fehlen passende Indexe.
PostgreSQL braucht trotz teils vorhandener Indexe länger, da für die temporäre Tabelle `cat_eleven_products` ein Scan durchgeführt werden muss.
=====
endif::exercise_solution[]
{blank}
......@@ -1156,33 +1169,42 @@ Lesen Sie zudem mindestens diese MonetDB-Unterkapitel durch:
Vergleichen Sie folgende Query von MonetDB mit derselben in PostgreSQL, welche dieselbe DVD-Store Datenbank `ds2` geladen hat:
.MonetDB
:query_name: customerid_avg-cust_hist
.[#{query_name}]#Q{counter:query_number} {query_name} MonetDB#
[source,sql]
----
sql\>trace select avg(customerid) from cust_hist;
...
sql:0.000 opt:18.483 run:32.425 clk:54.105 ms
trace
include::{queryoutputfile}[tags={query_name}-query]
----
.PostgreSQL
.[#{query_name}]#Q{query_number} {query_name} PostgreSQL#
[source,sql]
----
ds2=\# explain analyze select avg(customerid) from cust_hist;
...
Execution time: 807.310 ms
...
Zeit: 808.081 ms
include::{queryoutputfilepg}[tags={query_name}-eo]
include::{queryoutputfilepg}[tags={query_name}-query]
----
.a) Ausführungsplan MonetDB
[source%autofit,sql]
----
include::{queryoutputfile}[tags={query_name}-plan]
----
.b) Ausführungszeit MonetDB
[source%autofit,sql]
----
include::{queryoutputfile}[tags={query_name}-timing]
----
.c) Ausführungszeit PostgreSQL
[source%autofit,sql]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Obschon solche einfachen Tests immer mit Vorsicht zu geniessen sind, lassen sich folgende Aussagen machen:
* Der MonetDB-Server benötigt beispielsweise 54.105ms (clk) während PostgreSQL 807.310ms (Execution time) benötigt für die obige Aggregations-Query (ausgeführt auf einem _alten_ Laptop).
* MonetDB ist schnell bzw.
schneller als z.B.
PostgreSQL, wenn es um Aggregationsfunktionen geht (GROUP BY, SUM/AVG) und wenn nur wenige Ausgabe-Felder (Columns, Attributes) benötigt werden.
* PostgreSQL ist typischerweise bei der ersten Query-Durchführung (= Kaltstart) oft langsamer und dann bei der wiederholten Query-Durchführung schneller.
* Diese Unterschiede von Kalt- zu Warmstart sind bei MonetDB geringer;
dies wenn die Daten im Memory Platz haben und besonders nach dem allerersten Mal, wenn sie geladen sind.
* Der MonetDB-Server beendet die obige Aggregations-Query viel eher (`clk:`) als der PostgreSQL-Server (`Execution Time:`).
* MonetDB ist schnell bzw. schneller als z.B. PostgreSQL, wenn es um Aggregationsfunktionen geht (GROUP BY, SUM/AVG) und wenn nur wenige Ausgabe-Felder (Columns, Attributes) benötigt werden.
* Beide Server sind typischerweise bei der ersten Query-Durchführung (= Kaltstart) langsamer und dann bei der wiederholten Query-Durchführung schneller.
* Diese Unterschiede von Kalt- zu Warmstart sind bei MonetDB geringer; dies wenn die Daten im Memory Platz haben und besonders nach dem allerersten Mal, wenn sie geladen sind.
==== Aufgabe {ex_number}{counter:subtopic}: Diskussion In-Memory Stores
......
......@@ -126,7 +126,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB tbd.
Vergleich:: Klarer Vorteil von MonetDB da nur zwei Spalten für die Ausgabe benötigt werden.
=====
endif::exercise_solution[]
{blank}
......@@ -157,7 +157,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch pkey-Index. tbd.
Vergleich:: Klarer Vorteil von PostgreSQL durch _covering Index_.
Der Plan von MonetDB zeigt, dass zur Selektion drei Spalten zusammengeführt werden müssen.
=====
endif::exercise_solution[]
{blank}
......@@ -188,7 +189,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch pkey-Index. tbd.
Vergleich:: Klarer Vorteil von PostgreSQL durch _covering Index_.
Der Plan von MonetDB zeigt, dass zur Selektion drei Spalten zusammengeführt werden müssen.
=====
endif::exercise_solution[]
{blank}
......@@ -219,7 +221,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch den _covering index_.
Vergleich:: Trotz _covering index_ von PostgreSQL ist MonetDB in diesem Fall schneller.
Eine detaillierte Betrachtung des Histogramm würde hier eventuell Klärung bringen.
=====
endif::exercise_solution[]
{blank}
......@@ -250,7 +253,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB vermutlich durch effizienteren Vergleich der Bedingung.
Vergleich:: Vorteil von MonetDB durch den vermutlich effizienteren Textvergleich.
=====
endif::exercise_solution[]
{blank}
......@@ -281,7 +284,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB aufgrund der Spaltenorientierung.
Vergleich:: Klarer Vorteil von MonetDB für die Selektion einer grösseren Resultatmenge.
Trotz _covering Index_ ist hier PostgreSQL im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -312,7 +316,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von PostgreSQL durch den _covering index_ in gewünschter Sortierung.
Vergleich:: Vorteil von MonetDB trotz _covering index_ von PostgreSQL.
=====
endif::exercise_solution[]
{blank}
......@@ -343,7 +347,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch den _covering index_ in gewünschter Sortierung.
Vergleich:: Vorteil von PostgreSQL durch den _covering index_ und die eingeschränkte Resultatmenge.
=====
endif::exercise_solution[]
{blank}
......@@ -374,7 +378,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Kleiner Vorteil von MonetDB trotz _covering index_ von PostgreSQL.
Vergleich:: Ähnliche Ausführungszeit der beiden Server.
Die Resultatmenge passt bei PostgreSQL vermutlich auch gerade in den Speicher.
=====
endif::exercise_solution[]
{blank}
......@@ -405,7 +410,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Kleiner Vorteil von PostgreSQL durch passenden _covering index_ und günstige Einschränkung am Ende.
Vergleich:: Trotz pssendem Index und günstiger Einschränkung der Resultatmenge ist PostgreSQL im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -440,6 +445,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB weil nur die passende Spalte bearbeitet werden muss.
Der _covering Index_ von PostgreSQL hilft zwar, kann aber nicht mit MonetDB mithalten.
=====
endif::exercise_solution[]
{blank}
......@@ -470,7 +476,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von PostgreSQL durch pkey-Index.
Vergleich:: Klarer Vorteil von PostgreSQL durch _primary key Index_.
=====
endif::exercise_solution[]
{blank}
......@@ -501,7 +507,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB von ca. 50%.
Vergleich:: Vorteil von MonetDB durch effizienten Textvergleich der `city` Spalte.
=====
endif::exercise_solution[]
{blank}
......@@ -532,7 +538,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB, vermutlich durch effizientere Aufbereitung der Daten im Speicher.
Vergleich:: Vorteil von MonetDB durch effizienten Textvergleich und der Aufbereitung der Daten im Speicher.
=====
endif::exercise_solution[]
{blank}
......@@ -563,7 +569,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch sortierte Ablage und Limit Bedingung.
Vergleich:: Klarer Vorteil von PostgreSQL durch sortierte Ablage der Zeilen und der Limit Bedingung.
=====
endif::exercise_solution[]
{blank}
......@@ -594,7 +600,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index
Vergleich:: Klarer Vorteil von PostgreSQL durch passenden Index.
MonetDB braucht hier länger um die Daten aller Spalten zusammenzufassen.
=====
endif::exercise_solution[]
{blank}
......@@ -625,7 +632,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB da PostgreSQL scheinbar einen Bitmap Scan durchführen muss.
Vergleich:: Vorteil von MonetDB obschon einige Spalten zusammengefasst werden müssen.
PostgreSQL macht zwar gebrauch vom Index, braucht aber vermutlich länger um die richtige Datapage zu lokalisieren.
=====
endif::exercise_solution[]
{blank}
......@@ -688,7 +696,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index mit optimaler Bedingung im Randbereich.
Vergleich:: Vorteil von PostgreSQL durch passenden Index und Einschränkung der `orderid`.
=====
endif::exercise_solution[]
{blank}
......@@ -719,7 +727,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index und Möglichkeit der Parallelisierung der Aggregation.
Vergleich:: Vorteil von MonetDB in der Aggregation weil nur eine Spalte herangezogen werden muss.
=====
endif::exercise_solution[]
{blank}
......@@ -750,7 +758,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB, vermutlich bedingt durch die adhoc Erstellung von Indexes aufgrund des vorangegangenen Query.
Vergleich:: Vorteil von MonetDB in der Aggreagation über zwei Spalen hinweg.
PostgreSQL nutzt zwar den Index, braucht aber länger um über alle Datapages hinweg die Daten zu aggregieren.
=====
endif::exercise_solution[]
{blank}
......@@ -781,7 +790,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von PostgreSQL durch passenden Index.
Vergleich:: Vorteil von PostgreSQL durch passenden Index und vor allem die Reduktion der durchsuchten Menge.
=====
endif::exercise_solution[]
{blank}
......@@ -814,8 +823,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL braucht trotz spezifischem `title` Index länger für die Suche.
Vergleich:: Die beiden Server brauchen ähnlich lange um die passenden Titel zu finden.
PostgreSQL gewinnt durch die Nutzung des `gist` Index Zeit, MonetDB braucht jedoch diese Zeit um alle Spalten zu konsolidieren.
=====
endif::exercise_solution[]
{blank}
......@@ -848,8 +857,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL braucht durch Abarbeitung der beiden sequential Scans mehr Zeit.
Vergleich:: Klarer Vorteil von MonetDB obschon einige Spalten von verschiedenen Tabellen konsolidiert werden müssen.
PostgreSQL nutzt die vorhandenen Indexe der Join Bedingung nicht und verliert durch die sequential Scans Zeit.
=====
endif::exercise_solution[]
{blank}
......@@ -911,8 +920,9 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB durch frühes Aussortieren der `orders` basierend auf der `customerid`.
Die Bedingung `o1.orderdate <> o2.orderdate` kann bei PostgreSQL nicht durch einen Index optimiert werden.
Vergleich:: MonetDB scheint mit _non-equi-joins_ im Vorteil zu sein.
Das liegt womöglich daran, dass für den Vergleich nur die Daten der Datumsspalte vorhanden sein müssen und diese in den Speicher passen.
PostgreSQL nutzt für die Reduktion der `customerid` zwar den Index, für den Vergleich des Datums muss aber jeweils die ganze Zeile in den Speicher geladen werden.
=====
endif::exercise_solution[]
{blank}
......@@ -943,7 +953,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB, PostgreSQL fehlt ein passender Index.
Vergleich:: Klarer Vorteil von MonetDB weil nur wenige Spalten in Frage kommen.
PostgreSQL nutzt die vorhanden Indexe nicht.
=====
endif::exercise_solution[]
{blank}
......@@ -974,7 +985,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB trotz Index bei PostgreSQL.
Vergleich:: Vorteil von MonetDB durch Lokalität der Daten.
Trotz Verwendung der Indexe ist PostgreSQL hier ein wenig im Nachteil.
=====
endif::exercise_solution[]
{blank}
......@@ -1005,8 +1017,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB da die gesuchten Daten noch in den Speicher passen.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1037,8 +1049,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB da die gesuchten Daten noch in den Speicher passen.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1069,8 +1081,8 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Vorteil von MonetDB obschon die Ausführungszeit mit dieser aufwändigen Join Bedingung gewachsen ist.
PostgreSQL verwendet zwar verfügbare Indexe, braucht aber wiederum Zeit um Hashes zu berechnen und vergleichen.
=====
endif::exercise_solution[]
{blank}
......@@ -1101,8 +1113,9 @@ include::{queryoutputfile}[tags={query_name}-timing]
----
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Vorteil von MonetDB.
PostgreSQL führt einige sequential Scans durch welche entsprechend Zeit kosten.
Vergleich:: Scheinbar passen die Daten der temporären Tabelle zum Vorteil von MonetDB gut in den Speicher.
Dadurch bleibt die Ausführungszeit trotz komplizierter Aufbereitung gering.
PostgreSQL nutzt zwar einen Index der Products Tabelle, muss aber die temporäre Tabelle `orderlines_to_products_eleven` sequentiell durchstöbern.
=====
endif::exercise_solution[]
{blank}
......@@ -1134,7 +1147,7 @@ include::{queryoutputfile}[tags={query_name}-timing]
include::{queryoutputfilepg}[tags={query_name}-explain-text]
----
Vergleich:: Klarer Vorteil von MonetDB.
PostgreSQL fehlen passende Indexe.
PostgreSQL braucht trotz teils vorhandener Indexe länger, da für die temporäre Tabelle `cat_eleven_products` ein Scan durchgeführt werden muss.
=====
endif::exercise_solution[]
{blank}
......@@ -1156,33 +1169,42 @@ Lesen Sie zudem mindestens diese MonetDB-Unterkapitel durch:
Vergleichen Sie folgende Query von MonetDB mit derselben in PostgreSQL, welche dieselbe DVD-Store Datenbank `ds2` geladen hat:
.MonetDB
:query_name: customerid_avg-cust_hist
.[#{query_name}]#Q{counter:query_number} {query_name} MonetDB#
[source,sql]
----
sql\>trace select avg(customerid) from cust_hist;
...
sql:0.000 opt:18.483 run:32.425 clk:54.105 ms
trace
include::{queryoutputfile}[tags={query_name}-query]
----
.PostgreSQL
.[#{query_name}]#Q{query_number} {query_name} PostgreSQL#
[source,sql]
----
ds2=\# explain analyze select avg(customerid) from cust_hist;
...
Execution time: 807.310 ms
...
Zeit: 808.081 ms
include::{queryoutputfilepg}[tags={query_name}-eo]