Bisher bekannte Errata sind in der Tabelle unten nach Datum der Drucklegung aufgelistet. Wenn Sie einen Fehler gefunden haben, der unten nicht Aufscheint, melden Sie ihn uns bitte mit dem entsprechenden Formular!
Das Datum der Drucklegung findet sich auf der Rückseite des ersten Blattes ("copyright page") rechts unten.

Druck Seite Absatz Beschreibung
2012-05-01 v 6. "Order By" falsch formatiert
Groß- und Kleinschreibung: "Iindizieren"
2013-01-13, 2012-08-28, 2012-05-01 vi letzter "…Entwickler nur wissenlernen müssen…"
2012-05-01 vii KAPITEL 2, 1 Falsche Zeitform: "…Kapitel erklärte alles…"
2012-05-01 vii KAPITEL 2, 2 Wort fehlt "…hier beschriebenen Techniken beherrscht,…"
2012-05-01 2 5

Irreführende Formulierung:
"…neue Einträge in konstanter Zeit – das heißt unabhängig von der Listenlänge – eingefügt werden."

"Konstante Zeit" bezieht sich hierbei nur auf die doppelt verkettete Liste – nicht auf die gesamte Einfügeoperation.

Neu:
"… neue Einträge eingefügt werden, ohne große Datenmengen zu bewegen – es müssen nur wenige Blätter neu verkettet werden."

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 4 4

Dabei entspricht der jeder Eintrag im Zweigknoten dem größten Wert im Blattknoten.

2012-05-01 5 3

Falsch:
"B-Tree steht für Balanced Tree – nicht Binary Tree."

Die Bedeutung des Buchstabens "B" in B-Tree ist unbekannt. Das ändert jedoch nichts daran, dass die balancierte Eigenschaft die bestimmende Eigenschaft ist.

Neu:
Ein B-Tree ist ein Balanced Tree – kein Binary Tree.

2015-06-17, 2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 6 3

Dieser Wiederspruch…

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 6 3

Dieser Wiederspruch wird oft auf den Mythos vom „defekten Index“ zurückgeführt.

2012-05-01 8 1

Ausdruck:
"Der Mythos des defekten Indexes ist derhat seinen Ursprung im Irrglauben, dass ein Indexzugriff nur den Baum durchwandern muss und daher immer schnell ist.

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 8 2

…wenn ein Constraint sicherstellt, dass das maximal ein Eintrag dem Abfragekriterium entspricht.

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 8 5

Wichtig ist, dass ein INDEX RANGE SCAN potenziell einen sehr großen Teil des Indexes lesen kannmuss.

2012-08-28, 2012-05-01 12, 13 2, 1 "…die Zweigestellen-Nummer."
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 14 6

&hellip, obwohl einsprechendeentsprechende Einträge in den Blattknoten vorhanden sind.

2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 16 1 "…wie man die Spaltenreihenfolge wählt, damit er möglichst viele SQL-Anweisungen unterstützenoft benutzt werden kann."
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 17 2

Damit können sie ohne großen Aufwand richtig Iindizieren, um einen optimalen Nutzen zu erzielen.

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 22 5

wohl definierter wohldefinierter Index …

2012-05-01 24 2 "…Version 5.6 keine Funktions-basierendes Indizieren."
2012-05-01 27 6 "Anhang A, „Ausführungspläne“, zeigt, wie die Zeilenschätzung in SQL Server- und PostgreSQL-Ausführungsplänen dargestellt wird."
2015-06-17, 2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 27 last

Man muss also die Abfragen nicht - umschreiben, um den Namen der berechneten Spalte zu verwenden.Bei einfachen Indizes auf Funktionen wie oben verwendet SQL Server diesen Index automatisch auch ohne Änderung der Abfrage. Bei indizierten Ausdrücken wie zum Beispiel X + 1 muss man die Abfrage umschreiben, sodass sie die berechnete Spalte in der where-Klausel benutzt wird. Im Zweifelsfall immer den Ausführungsplan prüfen.

2012-05-01 28 letzter Wortwahl: "…zu ungewünschtenunerwünschten Effekten…"
2012-08-28, 2012-05-01 30 3 "…vertrauen den Deklamrationen…"
2012-08-28, 2012-05-01 31 4 "…ist es also besser, immer dieselbe Funktion zu verwenden." (Beistrich fehlt)
2012-05-01 32 2 Wortwahl: "…alternativer Weg, WerteDaten an Datenbanken zu übergeben. Anstatt die WerteDaten direkt…"
2012-08-28, 2012-05-01 33, 34 3, 2 "Zweigestelle" (4x)
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 34 4 "Histogramme sind nurvor allem bei ungleicher Verteilung nützlich."
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 34 5 "Bei einer gleichmäßigen Verteilung genügt es oft,…"
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 35 1

Keine Bind-Parameter zu verwenden, ist, als würde man ein Programm jedes Mal neu kompilieren.

(Beistriche)

2012-08-28, 2012-05-01 35 4 "…sub-optimalen&hellip"
2012-05-01 37 Perl "$dbh->praepare"
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 39 1 "…autoforced parameterization…"
2012-05-01 40 letzter

Satz zum besseren Verständnis eingefügt:
"…Indexbaumes nutzlos. Das wird offensichtlich, wenn man bedenkt, dass es keinen Eintrag für Zweigstelle 27 in den Zweigknoten gibt – obwohl es in den Blattknoten einen gibt. Der durchsuchte…"

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 45 1

…, weil manche Suchbegriffe eine effiziente Index-Nutzung vermeidenverhindern können.

2012-05-01 46 2 "…die restlichen 17 Einträge werden zwar geladen, aber verworfen."
2012-05-01 48 MySQL "Schlüsselwörter match und against" (against falsch formatiert).
2012-05-01 49 1 "…häufigste Frage nurzur Indizierung…"
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 49 1 "Ist es besser, einen Index pro Spalte zu habenanzulegen…"
2012-05-01 49 vorletzter "Es gibt keine zweite AchseEcke."
2012-05-01 50 4 "…„Die Join Operation“
, erklärt…" (Beistrich am Zeilenanfang)
2012-08-28, 2012-05-01 50 7 "Bitmap-Indeizes"
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 54 4
CREATE INDEX idx
          ON tbl (A, B, C, ...)
       WHERE A IS NOT NULL
       ANDOR B IS NOT NULL
       ANDOR C IS NOT NULL
2012-05-01 55 vorletzter "…alle PrädikateBedingungen werden während des Indexzugriffs angewandtder Operation INDEX RANGE SCAN als Zugriffsprädikat verwendet."
2013-01-13, 2012-08-28, 2012-05-01 62,67 4,10 "INVTERVAL"
2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 62 7

ON table_namesales

2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 63 2

= DATE_FORMAT(now() , "%Y-%M'")

2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 66 4

TO_CHAR(sale_Ddate)

2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 68 1 "Das ist zwar ungewöhnlich, aber kein Problem, wenn man sieObwohl das eine sehr schlechte Design-Praxis ist, kann man einen Index dennoch nutzen, wenn man diese Spalten durchgehend als Text behandelt."
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 68 5 "Aufgrund der unterschiedlichen Da­ten­typen führt die DatenbankManche Datenbanken liefern hier einen Fehler (z.B. PostgreSQL), viele führen stattdessen aber einfach eine implizite Konvertierung durch:"
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 68 9

Da kann man sich schon Ffragen, …

2012-08-28, 2012-05-01 69 3 "…, sondern auch…" ('n' bei sondern fehlt)
2012-08-28, 2012-05-01 70 5 "verwendet" ('d' fehlt)
2012-05-01 71 2 "…sie kannkann also als Zugriffsprädikat genutzt werden"
2012-05-01 72 4 "… Mehraufwand, den kann man mit Bind-Parametern aber gering halten kann."
2012-08-28, 2012-05-01 72 4 "SQL-Datenbanken" ('n' fehlt)
2012-05-01 73 2 Wortwahl: "Wenn eine einzelnedavon nicht…"
2012-05-01 74 4 Wikipedia-Link als Fußnote zum KISS-Prinzip hinzugefügt.
2012-08-28, 2012-05-01 74 8 "Benutzte dennoch Bind-Parameter…"
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 75 4 "Der adaptive Ansatz besteht darin, vorerst alles wie gehabt zu machen, aber die Ausführungszeiten zu protokollieren. Wenn eine Ausführung einmal deutlich länger dauert, speichert der Optimizer die verwendeten Bind-Werte. Bei der nächsten Ausführung mit diesen Werten wird ein neuer Aus­füh­rungs­plan dafür erstellt. Das bedeutet, eine Abfrage muss einmal langsam laufen, bevor die zweite Ausführung von einem angepassten Ausführungsplan profitieren kann."
"Weiters wird die Selektivität der Bind-Paramter geschätzt, und mit dem Plan im Cache gespeichert. Der Schlüssel beim Zugriff auf diesen Cache wird um die Selektivitäts- bereiche erweitert, für die dieser Ausführungsplan gilt. Wenn die Selek- tivitäts-Schätzungen einer späteren Ausführung in den Bereich eines Ausführungsplanes im Cache fallen, kann dieser wiederverwendet werden. Andernfalls wird ein neuer Ausführungsplan erstellt, und mit denen im Cache verglichen. Bei einer Übereinstimmung wird stattdessen ein neuer Plan im Cache gespeichert, der auch die Selek- tivität der aktuellen Bind-Parameter abdeckt. Wenn es keine Überein- stimmung gibt, wird der neue Ausführungsplan zusammen mit den Selektivitäten im Cache abgelegt."
2012-05-01 77 2 "…auf NUMERIC_COLUMNNUMERIC_NUMBER nutzen?"
2012-05-01 79 3

"…to handle a growing amount…"
Auf Wikipedia ebenfalls korrigiert.

2012-08-28, 2012-05-01 82 5 "Da in keinenm der beiden Ausführungsplänen…"
2012-08-28, 2012-05-01 87 3 "…leistungsfähigere Prozessoren…"
2012-08-28, 2012-05-01 87 4 "…wie CouchDB oder MongoDB."
2012-05-01 90 2 "…aber bei Datenbanken aufgrund des hohen Preises und der beschränkten Lebenserwartung aber nicht weit verbreitet."
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 90 3

… eine Indexsuche …

2012-05-01 90 letzter

Ausdruck:
"Datenbanken speichern häufig benötigte Daten aber im Hauptspeicher zwischen (caching)."

Neu:
Datenbanken verwenden aber einen Zwischenspeicher (cache) für häufig benötigte Daten.

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 91 7

Keine Bind-Parameter zu verwenden, ist,

(Komma)
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 92 4

… alle Verkäufe dieser Mitarbeitern.

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 96 1

Verschachtelte Abfragen sollten man zwar vermeiden, …

2012-05-01 97 4 "Das bedeutet, dass ein Mitarbeiter…"
2012-08-28, 2012-05-01 97 4 query.where(queryBuilder.like(
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 101 1

potentziell

2012-05-01 103 2 "Das bedeutet, dass die Join-Richtung beeinflusst die Indizierung nicht beeinflusst."
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 103 5

potentziell

2012-05-01 107 vorletzter "vollständig, oder nur mit ausgewählten Spalten zu laden."
2013-01-13, 2012-08-28, 2012-05-01 108 letzter "(Work List Item #2241feature request #59025)"

It seems like the previous Work-List disappeared after Oracle bought SUN (and MySQL).

2012-08-28, 2012-05-01 109 1 "Dafür müssen beide Seiten…"
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 109 2

potentziell

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 112 6

Das gilt unabhängig davon, … (Komma)

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 119 1

40.000

10.000

(Tausender-Punkt)
2012-05-01 121 3

"…die ersten zehn ByteZeichen der Spalte…"
(MySQL Präfix-Indizierung verwendet Character Semantik)

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 123 10

… die physischen Adressen …

2012-05-01 126 letzter Leerzeichen fehlt: "…nächsten SeiteerklärtSeite erklärt die…"
2012-05-01 148 Oracle, 1 "…Größer-gleich(>=)-Filter…" (schließende Klammer im falschen Font gesetzt)
2013-01-13, 2012-08-28, 2012-05-01 152 5 OR "SALE_ID"<TO_NUMBER(:SALE_DATE:SALE_ID))
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 152 letzter "Das heißt, dass die Datenbank zwar einige Einträge der vorherigen Seite(n) liest, aber sofort verwirft.einige Einträge der vorherigen Seite(n) nochmals geprüft, aber sofort verworfen werden."
2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 156 1 Die PostgreSQL Datenbank führt diese Abfragen ohne Indexnutzung – also sehr ineffizient – aus. Die PostgreSQL Datenbank bricht den Index-Zugriff nicht ab, sobald genügend Ergebnisse gefunden wurden – die Ausführung ist also sehr ineffizient.
2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 163 2

(1) es erfolgt ein implizites commit (Ausnahmen: PostgreSQL und SQL Server)

2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 163 3

… Vaccuum-Prozess …

2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 166 letzter Neue Warnung:
"explain plan for erzeugt nicht unbedingt denselben Ausführungs- plan, als wenn man die Anweisung ausführen würde."
(Details zum Umgang damit gibt es in der nächsten Ausgabe von SPE)
2012-05-01 171 4 "…Kapitel „TestenPerformance und Skalierbarkeit“ zeigt…"
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 172 7 "Obwohl man bei der Ausführung einen konkreten Wert für den Platzhalter angeben muss, wird dieser beim Erstellen des Ausführungsplanes nicht benutzt. Der Ausführungsplan wurde nämlich schon mit dem prepare-Kommando erstellt."
"Bis PostgreSQL 9.1 wurde der Ausführungsplan bereits mit dem prepare erstellt. Die Werte, die beim execute angegeben werden, wurden nicht berücksichtigt. Seit PostgreSQL 9.2 wird der Ausführungsplan erst mit dem execute erstellt und kann daher an die gegebenen Werte angepasst werden."
2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 172 letzter "In diesem Fall berücksichtigt der Optimizer die konkreten Werte beim Erstellen des Ausführungsplanes. Wenn in einem Programm parametrisierte Abfragen verwendet werdenhat der Optimizer die konkreten Werte beim Erstellen des Ausführungsplanes schon immer berücksichtigt. Wenn man PostgreSQL 9.1 oder älter verwendet, und in einem Programm parametrisierte Abfragen benutzt, sollte man…"
2012-05-01 183 4

Die Einleitung zu Join-Operationen fehlt vollständig:
Join-Operationen verbinden grundsätzlich nur zwei Tabellen auf einmal. Falls mehrere Join-Operationen in einer Abfrage vorkommen, werden sie schrittweise durchgeführt; zuerst zwei Tabellen, dann das Zwischenergebnis mit der nächsten. Insofern kann der Begriff „Tabelle“ im Folgenden auch ein Zwischenergebnis bezeichnen.

2015-06-17, 2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 189 1,2,5

Der Text zu EQ_REF, CONST, REF und RANGE wurde um den Tabellenzugriff erweitert.

Die Beschreibung zu "Using Index" wurde um den Clustered-Index-Fall ergänzt.

2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 189 1

EQ_REF, CONST

2015-06-17, 2014-08-26, 2014-02-23, 2013-08-08, 2013-01-13, 2012-08-28, 2012-05-01 195 V

Vaccuum (PostgreSQL)

2012-05-01 196 letzter Groß- und Kleinschreibung: "wWiderruf"