Markus Winand 
Skalierung 
VOLKSKRANKHEIT 
“STIEFMÜTTERLICHE 
DATENBANK-INDIZIERUNG” 
10/09/14 Markus Winand
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
1 - Pandemisches Ausmaß 
Es betrifft Dich! 
(Symbol-Bild; keine echten Daten) 
http://upload.wikimedia.org/wikipedia/commo...
2 - Durch Erfolg verursacht 
Copyright © 2013 Telerik, Inc. All rights reserved
3 - Nicht Dein Fehler 
http://simpsonswiki.com/wiki/File:I_Didn%27t_Do_It!_Volume_III.png
Das Problem 
Query/Index Diskrepanz 
© 2014 by Markus Winand
Quantifizierung des Problems 
Meine Beobachtung: 
~50% der SQL-Performance-Probleme 
werden durch die Query/Index- 
Diskre...
Problem: Index/Query Diskrepanz 
“A very common cause of performance 
problems is lack of proper indexes or the 
use of qu...
Quantifizierung des Problems 
Percona White Paper: 
Gründe für Performance-Probleme, 
die einen Produktionsausfall verursa...
Quantifizierung des Problems 
Umfrage auf sqlskills.com: 
Ursachen der letzten SQL 
Server Performance-Probleme: 
27% T-SQ...
Quantifizierung des Problems 
Craig S. Mullins (DB Stratege und Forscher): 
„As much as 75% of poor relational performance...
Die Wurzel des Problems 
Indizierung findet zu spät statt 
Meist durch die falschen Personen 
© 2014 by Markus Winand
Wurzel des Problems: Admins indizieren 
Wie haben Datenbanken 
vor SQL funktioniert?
Wurzel des Problems: Admins indizieren 
Die Index-Nutzung war 
untrennbar 
mit den Abfragen verbunden.
Wurzel des Problems: Admins indizieren 
Beispiel: dBase 
Entwickler mussten... 
...Indizes bei Suchen explizit nutzen: 
!"...
Wurzel des Problems: Admins indizieren 
SQL ist eine Abstraktion: 
Es definiert nur die logische Sicht 
Die Implementierun...
Wurzel des Problems: Admins indizieren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tuning- 
Parameter 
SQL (Sprac...
Wurzel des Problems: Admins indizieren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tuning- 
Parameter 
Constraint...
Wurzel des Problems: Admins indizieren 
Entwickler Administratoren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tu...
Wurzel des Problems: Admins indizieren 
Heute wird Indizierung oft als 
Tuning-Aufgabe betrachtet, 
die in die Verantwortu...
Wurzel des Problems: Admins indizieren 
Ein Missverständnis, das neue Probleme bringt: 
Admins kennen die 
Abfragen nicht ...
Wurzel des Problems: Admins indizieren 
Ein Missverständnis, das neue Probleme bringt: 
Admins kennen die 
Abfragen nicht ...
Die Lösung 
Indizierung ist eine 
Entwicklungsaufgabe 
© 2014 by Markus Winand
Wurzel des Problems: Admins indizieren 
Entwickler Administratoren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tu...
Wurzel des Problems: Admins indizieren 
Entwickler Administratoren 
Constraints 
Indizes 
Backup 
& Recovery 
Speicher- 
M...
Neues Problem: es wird nicht gelehrt 
Indizierung ist nicht Teil des SQL-Standards und wird in 
Büchern über die Sprache S...
Neues Problem: es wird nicht gelehrt 
Manche Tuning-Bücher vertiefen Indizierung, 
verstecken es aber immer zwischen hunde...
Neues Problem: es wird nicht gelehrt 
Konsequenz: 
Entwickler wissen nicht, 
wie man Indizes richtig einsetzt. 
Ergebnisse...
3-Minuten Quiz: SQL-Indizierung 
Q1: Gut oder schlecht? (Funktionen) 
234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? 
@4A426$#"(#...
3-Minuten Quiz: SQL-Indizierung 
Q1: Gut oder schlecht? (Funktionen) 
234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? 
@4A426$#"(#...
3-Minuten Quiz: SQL-Indizierung 
J$K453='+#",B)*>$F$1GHI? 
LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMLMMMMMMMLMMMMMMMMMMMMML 
Komplett...
3-Minuten Quiz: Ergebnis
3-Minuten Quiz: SQL-Indizierung 
Q2: Gut oder schlecht? (Indiziertes Top-N) 
234564$7894:$#;*,%'($8$#;*$=+0$'+#,B)*? 
@4A4...
3-Minuten Quiz: SQL-Indizierung 
Q2: Gut oder schlecht? (Indiziertes Top-N) 
234564$7894:$#;*,%'($8$#;*$=+0$'+#,B)*? 
@4A4...
3-Minuten Quiz: SQL-Indizierung 
Das ist bereits die optimale Lösung. 
LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMMMMMMMMMMM...
3-Minuten Quiz: Ergebnis
Nebenbei: Finger weg von OFFSET 
@4A426$%'0$'+#,B)* 
$$C3D$#;* 
$/E434$+$F$ 
$3943$]K$'+#,B)*$94@2 
$A7D76$H 
!#$%'
Nebenbei: Finger weg von OFFSET 
!#$% ist verlockend, aber böse. 
 
Sticker und 
Bierdeckel holen! 
http://use-the-index-l...
3-Minuten Quiz: SQL-Indizierung 
Q3: Gut oder schlecht? (Reihenfolge) 
CREATE INDEX tbl_idx ON tbl (a, b); 
SELECT id, a, ...
3-Minuten Quiz: SQL-Indizierung 
Q3: Gut oder schlecht? (Reihenfolge) 
CREATE INDEX tbl_idx ON tbl (a, b); 
SELECT id, a, ...
3-Minuten Quiz: SQL-Indizierung 
Nur eine Abfrage kann den Index (a, b) gut nutzen: 
...WHERE a = ? AND b = ?; '''''''''''...
3-Minuten Quiz: SQL-Indizierung 
Spalten umdrehen (b, a): beide nutzen Index gut 
...WHERE a = ? AND b = ?; ''''''''''''''...
3-Minuten Quiz: Ergebnis
3-Minuten Quiz: SQL-Indizierung 
Q4: Gut oder schlecht? (LIKE indizieren) 
CREATE INDEX tbl_idx 
ON tbl (text); 
SELECT id...
3-Minuten Quiz: SQL-Indizierung 
Q4: Gut oder schlecht? (LIKE indizieren) 
CREATE INDEX tbl_idx 
ON tbl (text); 
SELECT id...
3-Minuten Quiz: SQL-Indizierung 
B-Tree-Indizes unterstützen keine führenden 
Wildcard-Zeichen. 
'''''''''''''''''''''''''...
3-Minuten Quiz: Ergebnis
3-Minuten Quiz: SQL-Indizierung 
Q5: Wie ändert sich die Performance? (IOS) 
234564$7894:$#;*,%'($ 
$$$$$$$$$$8$#;*$=+0$'+...
3-Minuten Quiz: Ergebnis
3-Minuten Quiz: Ergebnis
3-Minuten Quiz: SQL-Indizierung 
Vorher war ein Index-Only-Scan möglich 
(“covering Index”), nachher nicht mehr. 
''''''''...
3-Minuten Quiz: 60% fallen durch! 
Nur knapp 40% beantworten 
vier oder mehr Fragen richtig.
(Mit Raten alleine würden 12.5% bestehen)
Volkskrankheit: stiefmütterliche Indizierung 
Jeder weiss, dass Indizierung 
wichtig für Performance ist, 
aber niemand ni...
Volkskrankheit: stiefmütterliche Indizierung 
Index-Details sind kaum bekannt 
!„Details“ wie die Spaltenreihenfolge oder ...
Volkskrankheit: Stiefmütterliche Indizierung 
Legst Du Indizes einfach an 
oder 
designst du Indizes?
Über Markus Winand 
Ich tune Entwickler auf 
SQL-Performance. 
Training  Tuning: 
winand.at 
Autor von: 
SQL Performance E...
Nächste SlideShare
Wird geladen in …5
×

Volkskrankheit "Stiefmuetterliche Indizierung"

1.678 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.678
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
132
Aktionen
Geteilt
0
Downloads
10
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Volkskrankheit "Stiefmuetterliche Indizierung"

  1. 1. Markus Winand Skalierung VOLKSKRANKHEIT “STIEFMÜTTERLICHE DATENBANK-INDIZIERUNG” 10/09/14 Markus Winand
  2. 2. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  3. 3. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  4. 4. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  5. 5. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  6. 6. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  7. 7. http://www.commitstrip.com/en/2014/06/03/the-problem-is-not-the-tool-itself/
  8. 8. 1 - Pandemisches Ausmaß Es betrifft Dich! (Symbol-Bild; keine echten Daten) http://upload.wikimedia.org/wikipedia/commons/c/c7/2009_world_subdivisions_flu_pandemic.png
  9. 9. 2 - Durch Erfolg verursacht Copyright © 2013 Telerik, Inc. All rights reserved
  10. 10. 3 - Nicht Dein Fehler http://simpsonswiki.com/wiki/File:I_Didn%27t_Do_It!_Volume_III.png
  11. 11. Das Problem Query/Index Diskrepanz © 2014 by Markus Winand
  12. 12. Quantifizierung des Problems Meine Beobachtung: ~50% der SQL-Performance-Probleme werden durch die Query/Index- Diskrepanz verursacht
  13. 13. Problem: Index/Query Diskrepanz “A very common cause of performance problems is lack of proper indexes or the use of queries that are not using existing indexes.” —Buda Consulting http://www.budaconsulting.com/Portals/52677/docs/top_5_tech_brief.pdf
  14. 14. Quantifizierung des Problems Percona White Paper: Gründe für Performance-Probleme, die einen Produktionsausfall verursachten: 38% bad SQL 15% schema and indexing http://www.percona.com/files/white-papers/causes-of-downtime-in-mysql.pdf
  15. 15. Quantifizierung des Problems Umfrage auf sqlskills.com: Ursachen der letzten SQL Server Performance-Probleme: 27% T-SQL 19% Poor indexing http://www.sqlskills.com/blogs/paul/survey-what-are-the-most-common-causes-of-performance-problems/
  16. 16. Quantifizierung des Problems Craig S. Mullins (DB Stratege und Forscher): „As much as 75% of poor relational performance is caused by "bad" SQL and application code.” Noel Yuhanna (Forrester Research): „The key difficulties surrounding performance continue to be poorly written SQL statements, improper DBMS configuration and a lack of clear understanding of how to tune databases to solve performance issues.”
  17. 17. Die Wurzel des Problems Indizierung findet zu spät statt Meist durch die falschen Personen © 2014 by Markus Winand
  18. 18. Wurzel des Problems: Admins indizieren Wie haben Datenbanken vor SQL funktioniert?
  19. 19. Wurzel des Problems: Admins indizieren Die Index-Nutzung war untrennbar mit den Abfragen verbunden.
  20. 20. Wurzel des Problems: Admins indizieren Beispiel: dBase Entwickler mussten... ...Indizes bei Suchen explizit nutzen: !"#$%&'"($#)$*+!#,&+-" !!! $$$.%&'$/%&+&' Zwei Anweisungen ...Index-Wartung berücksichtigen: !"#$%&'"($#)$*+!#,&+-"0$%'(1
  21. 21. Wurzel des Problems: Admins indizieren SQL ist eine Abstraktion: Es definiert nur die logische Sicht Die Implementierung muss sich um alles andere Kümmern.
  22. 22. Wurzel des Problems: Admins indizieren Indizes Backup & Recovery Speicher- Management Tuning- Parameter SQL (Sprache) bietet: Constraints Tabellen Views Transaktionen Abfragen Daten- Manipulation SQL Datenbanken (Software) bieten: Hoch-verfügbarkeit
  23. 23. Wurzel des Problems: Admins indizieren Indizes Backup & Recovery Speicher- Management Tuning- Parameter Constraints Tabellen Views Transaktionen Abfragen Daten- Manipulation SQL Datenbanken (Software) bieten: Entwickler Hoch-verfügbarkeit
  24. 24. Wurzel des Problems: Admins indizieren Entwickler Administratoren Indizes Backup & Recovery Speicher- Management Tuning- Parameter Constraints Tabellen Views Transaktionen Abfragen Daten- Manipulation Hoch-verfügbarkeit
  25. 25. Wurzel des Problems: Admins indizieren Heute wird Indizierung oft als Tuning-Aufgabe betrachtet, die in die Verantwortung der Admins fällt.
  26. 26. Wurzel des Problems: Admins indizieren Ein Missverständnis, das neue Probleme bringt: Admins kennen die Abfragen nicht Müssen die Abfragen erst eruieren. Sehr zeitaufwendig und meistens unvollständig. by G-10gian82 deviantart.com
  27. 27. Wurzel des Problems: Admins indizieren Ein Missverständnis, das neue Probleme bringt: Admins kennen die Abfragen nicht Müssen die Abfragen erst eruieren. Sehr zeitaufwendig und meistens unvollständig. Admins können die Abfragen nicht ändern Sie können den Index an die Abfrage anpassen. Aber nicht die Abfrage an den Index.
  28. 28. Die Lösung Indizierung ist eine Entwicklungsaufgabe © 2014 by Markus Winand
  29. 29. Wurzel des Problems: Admins indizieren Entwickler Administratoren Indizes Backup & Recovery Speicher- Management Tuning- Parameter Constraints Tabellen Views Transaktionen Abfragen Daten- Manipulation Hoch-verfügbarkeit
  30. 30. Wurzel des Problems: Admins indizieren Entwickler Administratoren Constraints Indizes Backup & Recovery Speicher- Management Tuning- Parameter Tabellen Views Transaktionen Abfragen Daten- Manipulation Hoch-verfügbarkeit Muss passen!
  31. 31. Neues Problem: es wird nicht gelehrt Indizierung ist nicht Teil des SQL-Standards und wird in Büchern über die Sprache SQL daher nicht abgedeckt. 11 SQL-Bücher analysiert: nur 1.0% der Seiten sind über Indizierung (70 von 7330 Seiten). Beispiele: Oracle SQL by Example: 2.0% (19/960) Beginning DBs with PostgreSQL: 0.8% (5/664) Learning SQL: 3.3% (11/336—höchste Rate dieser Kategorie)
  32. 32. Neues Problem: es wird nicht gelehrt Manche Tuning-Bücher vertiefen Indizierung, verstecken es aber immer zwischen hunderten Seiten über HW, OS and DB-Parametriesierung. 15 Datenbank-Admin-Bücher analysiert: 6% der Seiten sind über Indizierung (395 von 6568 Seiten). Beispiele: Oracle Performance Survival Guide: 5.2% (38/730) High Performance MySQL: 8% (55/684) PostgreSQL 9 High Performance: 5.8% (27/468)
  33. 33. Neues Problem: es wird nicht gelehrt Konsequenz: Entwickler wissen nicht, wie man Indizes richtig einsetzt. Ergebnisse unsers 3-Minuten online Tests: http://use-the-index-luke.com/de/3-minuten-test 5 Fragen: jede über einen bestimmten Anwendungsfall von Indizes. Nicht repräsentativ!
  34. 34. 3-Minuten Quiz: SQL-Indizierung Q1: Gut oder schlecht? (Funktionen) 234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? @4A426$#"(#0$'+#",B)* $$C3<D$#;* $/E434$)*+,-!"#$%&'(.$F$1GHI?
  35. 35. 3-Minuten Quiz: SQL-Indizierung Q1: Gut oder schlecht? (Funktionen) 234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? @4A426$#"(#0$'+#",B)* $$C3<D$#;* $/E434$)*+,-!"#$%&'(.$F$1GHI? http://use-the-index-luke.com/de/sql/where/verstuemmelung/datumsfelder
  36. 36. 3-Minuten Quiz: SQL-Indizierung J$K453='+#",B)*>$F$1GHI? LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMLMMMMMMMLMMMMMMMMMMMMML Komplette N$#/0$$N$O)!!%;*",Tabelle P"wird Q!$N$P"Q$$N$1'23$$N$4(#R+$$$$$$$N LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMLMMMMMMMLMMMMMMMMMMMMML gelesen N$+445$N$8SAA$$$$$$$$$$N$6744$N$89:;:$N$S!%&T$UV"R"$N$ LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMLMMMMMMMLMMMMMMMMMMMMML J$$$'+#",B)*$WF$@63,6<,9564=X1GHIMGHMGHX0$XYKMY-MY'> 589$'+#",B)*$Z$$@63,6<,9564=X1GH[MGHMGHX0$XYKMY-MY'> LMMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMLMMMMMMMMMMMMMMMMMML Index N$#/0$$$N$wird O)!!%;*",genutzt P"Q!$N$P"Q$$$$$N$1'23$$N$4(#R+$$$$$$$$$$$$N LMMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMLMMMMMMMMMMMMMMMMMML N$1"<=$$N$#;*,%'($$$$$$$N$#>(%?!@$N$55:9A$N$$$$$$$$$$$$$$$$$$N$ LMMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMLMMMMMMMMMMMMMMMMMML
  37. 37. 3-Minuten Quiz: Ergebnis
  38. 38. 3-Minuten Quiz: SQL-Indizierung Q2: Gut oder schlecht? (Indiziertes Top-N) 234564$7894:$#;*,%'($8$#;*$=+0$'+#,B)*? @4A426$%'0$'+#,B)* $$C3D$#;* Syntax-Varianten: Std: $/E434$+$F$ C462E$C73@6$H$3/$8AK $3943$]K$'+#,B)*$94@2 Oracle: /E434$3/8SD$ZFH $A7D76$H SQL Server: @4A426$6^$H
  39. 39. 3-Minuten Quiz: SQL-Indizierung Q2: Gut oder schlecht? (Indiziertes Top-N) 234564$7894:$#;*,%'($8$#;*$=+0$'+#,B)*? @4A426$%'0$'+#,B)* $$C3D$#;* Syntax-Varianten: Std: $/E434$+$F$ C462E$C73@6$H$3/$8AK $3943$]K$'+#,B)*$94@2 Oracle: /E434$3/8SD$ZFH $A7D76$H SQL Server: @4A426$6^$H http://use-the-index-luke.com/de/sql/partielle-ergebnisse/top-n-abfragen
  40. 40. 3-Minuten Quiz: SQL-Indizierung Das ist bereits die optimale Lösung. LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMMMMMMMMMMMMMMMMMMMML N$#QO$N$O)!!%;*,PQ!$N$PQ$$$$$N$4(#R+$$$$$$$$$$$$$$$$$$$$N LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMMMMMMMMMMMMMMMMMMMML N$R.$$N$#;*,%'($$$$$$$N$#;*,%'($N$S!%T$UVR?$S!%T$%'($N$ LMMMMMMLMMMMMMMMMMMMMMMLMMMMMMMMMLMMMMMMMMMMMMMMMMMMMMMMMMMML So schnell wie ein Primärschlüssel-Zugriff. (Im Falle von MySQL und SQL Server wegen des Clustered-Indexes ein Index-Only Scan)
  41. 41. 3-Minuten Quiz: Ergebnis
  42. 42. Nebenbei: Finger weg von OFFSET @4A426$%'0$'+#,B)* $$C3D$#;* $/E434$+$F$ $3943$]K$'+#,B)*$94@2 $A7D76$H !#$%'
  43. 43. Nebenbei: Finger weg von OFFSET !#$% ist verlockend, aber böse. Sticker und Bierdeckel holen! http://use-the-index-luke.com/no-offset
  44. 44. 3-Minuten Quiz: SQL-Indizierung Q3: Gut oder schlecht? (Reihenfolge) CREATE INDEX tbl_idx ON tbl (a, b); SELECT id, a, b FROM tbl WHERE a = ? AND b = ?; SELECT id, a, b FROM tbl WHERE b = ?;
  45. 45. 3-Minuten Quiz: SQL-Indizierung Q3: Gut oder schlecht? (Reihenfolge) CREATE INDEX tbl_idx ON tbl (a, b); SELECT id, a, b FROM tbl WHERE a = ? AND b = ?; SELECT id, a, b FROM tbl WHERE b = ?; http://use-the-index-luke.com/de/sql/where/gleichheit/zusammengesetzte-schluessel
  46. 46. 3-Minuten Quiz: SQL-Indizierung Nur eine Abfrage kann den Index (a, b) gut nutzen: ...WHERE a = ? AND b = ?; '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-)(),.//012-34-+/)()4-+)))))()5.6/)()$7*58))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()()*))()+,-./01)))))))()*123097)())))2)():;;)=/0?)09-7)( '''''''''''''''''''''''''''''''''''''''''''''''''''''' ...WHERE b = ?; '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-))(),.//012-34-+/)()4-+)))))())5.6/)()$7*58))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()/30)1)()4566))))))))))()*123097)()27879)():;;)=/0?)09-7)( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' Ganzer Index wird gelesen!
  47. 47. 3-Minuten Quiz: SQL-Indizierung Spalten umdrehen (b, a): beide nutzen Index gut ...WHERE a = ? AND b = ?; '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-)(),.//012-34-+/)()4-+)))))()5.6/)()$7*58))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()()*))()+,-./01)))))))()*123097)())))2)():;;)=/0?)09-7)( '''''''''''''''''''''''''''''''''''''''''''''''''''''' ...WHERE b = ?; '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-)(),.//012-34-+/)()4-+)))))()5.6/)()$7*58))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''' ()5-@))()*123097)))))))()*123097)())))A)():;;)=/0?)09-7)( ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  48. 48. 3-Minuten Quiz: Ergebnis
  49. 49. 3-Minuten Quiz: SQL-Indizierung Q4: Gut oder schlecht? (LIKE indizieren) CREATE INDEX tbl_idx ON tbl (text); SELECT id, text FROM tbl WHERE text LIKE '%BEGRIFF%';
  50. 50. 3-Minuten Quiz: SQL-Indizierung Q4: Gut oder schlecht? (LIKE indizieren) CREATE INDEX tbl_idx ON tbl (text); SELECT id, text FROM tbl WHERE text LIKE '%BEGRIFF%'; http://use-the-index-luke.com/de/sql/where/bereiche/like-filter
  51. 51. 3-Minuten Quiz: SQL-Indizierung B-Tree-Indizes unterstützen keine führenden Wildcard-Zeichen. '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-))(),.//012-34-+/)()4-+)))))())5.6/)()$7*58))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()/30)1)()4566))))))))))()*123097)()27:8;)():;;)=/0?)09-7)( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' Brauchst du wirklich lexikalische Suche? Ist Volltext-Suche eine Option? Externe Such-Lösung?
  52. 52. 3-Minuten Quiz: Ergebnis
  53. 53. 3-Minuten Quiz: SQL-Indizierung Q5: Wie ändert sich die Performance? (IOS) 234564$7894:$#;*,%'($ $$$$$$$$$$8$#;*$=+0$'+#,B)*_-? @4A426$'+#,B)*_- $$$$$0$B)_#=` $$C3D$#;* $/E434$+$F$ $a3S^$]K$'+#,B)*_-? =bHGG$c%* @4A426$'+#,B)*_- $$$$$0$B)_#=` $$C3D$#;* $/E434$+$F$ $$$+6B55C5D $a3S^$]K$'+#,B)*_-? =bHG$c%*
  54. 54. 3-Minuten Quiz: Ergebnis
  55. 55. 3-Minuten Quiz: Ergebnis
  56. 56. 3-Minuten Quiz: SQL-Indizierung Vorher war ein Index-Only-Scan möglich (“covering Index”), nachher nicht mehr. '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()*+,-)(),.//012-34-+/)()4-+)))))()$7*58))))))))))))))))))))( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ()5-@))()*123097)))))))()*123097)()=/0?)6B-5-C)5/3=/30)1)( '''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''' ()*+,-)(),.//012-34-+/)()4-+)))))()$7*58)))))))( ''''''''''''''''''''''''''''''''''''''''''' ()5-@))()*123097)))))))()*123097)()=/0?)6B-5-)( ''''''''''''''''''''''''''''''''''''''''''' Kleiner Unterschied, große Wirkung. http://use-the-index-luke.com/blog/2014-01/unreasonable-defaults-primary-key-clustering-key
  57. 57. 3-Minuten Quiz: 60% fallen durch! Nur knapp 40% beantworten vier oder mehr Fragen richtig.
  58. 58. (Mit Raten alleine würden 12.5% bestehen)
  59. 59. Volkskrankheit: stiefmütterliche Indizierung Jeder weiss, dass Indizierung wichtig für Performance ist, aber niemand nimmt sich Zeit es ordentlich zu lernen und durchzuführen.
  60. 60. Volkskrankheit: stiefmütterliche Indizierung Index-Details sind kaum bekannt !„Details“ wie die Spaltenreihenfolge oder Bereichs-suchen müssen gelernt und verstanden werden. Nur eine Funktion wird verwendet: schnell suchen. !Indizes haben drei Funktionen (Mächte/Powers): Daten finden, Daten gruppieren, Daten sortieren. Abfragen werden einzeln Indiziert !Man muss aus Applikationssicht indizieren (alle Abfragen beachten). Das ist eine Design-Aufgabe!
  61. 61. Volkskrankheit: Stiefmütterliche Indizierung Legst Du Indizes einfach an oder designst du Indizes?
  62. 62. Über Markus Winand Ich tune Entwickler auf SQL-Performance. Training Tuning: winand.at Autor von: SQL Performance Explained Geeky blog: use-the-index-luke.com
  63. 63. Über Markus Winand use-the-index-luke.com

×