SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
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/commons/c/c7/2009_world_subdivisions_flu_pandemic.png
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- 
Diskrepanz verursacht
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
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
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/
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.”
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: 
!"#$%&'"($#)$*+!#,&+-" 
!!! 
$$$.%&'$/%&+&' Zwei 
Anweisungen 
...Index-Wartung berücksichtigen: 
!"#$%&'"($#)$*+!#,&+-"0$%'(1
Wurzel des Problems: Admins indizieren 
SQL ist eine Abstraktion: 
Es definiert nur die logische Sicht 
Die Implementierung muss sich 
um alles andere Kümmern.
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
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
Wurzel des Problems: Admins indizieren 
Entwickler Administratoren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tuning- 
Parameter 
Constraints 
Tabellen 
Views 
Transaktionen 
Abfragen 
Daten- 
Manipulation 
Hoch-verfügbarkeit
Wurzel des Problems: Admins indizieren 
Heute wird Indizierung oft als 
Tuning-Aufgabe betrachtet, 
die in die Verantwortung der 
Admins fällt.
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
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.
Die Lösung 
Indizierung ist eine 
Entwicklungsaufgabe 
© 2014 by Markus Winand
Wurzel des Problems: Admins indizieren 
Entwickler Administratoren 
Indizes 
Backup 
& Recovery 
Speicher- 
Management 
Tuning- 
Parameter 
Constraints 
Tabellen 
Views 
Transaktionen 
Abfragen 
Daten- 
Manipulation 
Hoch-verfügbarkeit
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!
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)
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)
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!
3-Minuten Quiz: SQL-Indizierung 
Q1: Gut oder schlecht? (Funktionen) 
234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? 
@4A426$#"(#0$'+#",B)* 
$$C3<D$#;* 
$/E434$)*+,-!"#$%&'(.$F$1GHI?
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
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
3-Minuten Quiz: Ergebnis
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
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
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)
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-luke.com/no-offset
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 = ?;
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
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!
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)( 
''''''''''''''''''''''''''''''''''''''''''''''''''''''
3-Minuten Quiz: Ergebnis
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%';
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
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?
3-Minuten Quiz: Ergebnis
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%*
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. 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
()*+,-)(),.//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
3-Minuten Quiz: 60% fallen durch! 
Nur knapp 40% beantworten 
vier oder mehr Fragen richtig.

Contenu connexe

En vedette

Indexes: The neglected performance all rounder
Indexes: The neglected performance all rounderIndexes: The neglected performance all rounder
Indexes: The neglected performance all rounderMarkus Winand
 
SQL Transactions - What they are good for and how they work
SQL Transactions - What they are good for and how they workSQL Transactions - What they are good for and how they work
SQL Transactions - What they are good for and how they workMarkus Winand
 
Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Markus Winand
 
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZ
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZPERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZ
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZFadel Galeb
 
Lg stuttgart varta_delisting
Lg stuttgart varta_delistingLg stuttgart varta_delisting
Lg stuttgart varta_delistingSpruchZ
 
Desarrollo organizacional0
Desarrollo organizacional0Desarrollo organizacional0
Desarrollo organizacional0Andrea Osorno
 
Cambio de actitud
Cambio de actitudCambio de actitud
Cambio de actitudtonymachaca
 
Historia de la Comunidad La Florida
Historia de la Comunidad La FloridaHistoria de la Comunidad La Florida
Historia de la Comunidad La FloridaDiego Mejía
 
Evaluacion final uml_grupo_200609_5
Evaluacion final uml_grupo_200609_5Evaluacion final uml_grupo_200609_5
Evaluacion final uml_grupo_200609_5Leidibrand
 
La enseñanza media ¿prepara para el trabajo
La enseñanza media ¿prepara para el trabajoLa enseñanza media ¿prepara para el trabajo
La enseñanza media ¿prepara para el trabajofelipeburrows
 
Stellungnahme des DAV zum Delisting
Stellungnahme des DAV zum Delisting Stellungnahme des DAV zum Delisting
Stellungnahme des DAV zum Delisting SpruchZ
 

En vedette (20)

Indexes: The neglected performance all rounder
Indexes: The neglected performance all rounderIndexes: The neglected performance all rounder
Indexes: The neglected performance all rounder
 
SQL Transactions - What they are good for and how they work
SQL Transactions - What they are good for and how they workSQL Transactions - What they are good for and how they work
SQL Transactions - What they are good for and how they work
 
Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016
 
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZ
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZPERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZ
PERFIL PROFESIONAL SEGÚN EL MERCADO DEMANDANTE EN LA CIUDAD DE SANTA CRUZ
 
Instr73
Instr73Instr73
Instr73
 
Lg stuttgart varta_delisting
Lg stuttgart varta_delistingLg stuttgart varta_delisting
Lg stuttgart varta_delisting
 
DSS. Nov 21 2013. Jorge Rachid
DSS. Nov 21 2013. Jorge RachidDSS. Nov 21 2013. Jorge Rachid
DSS. Nov 21 2013. Jorge Rachid
 
Desarrollo organizacional0
Desarrollo organizacional0Desarrollo organizacional0
Desarrollo organizacional0
 
Story board
Story boardStory board
Story board
 
DSS. Nov 22 2013. Raúl Mideros
DSS. Nov 22 2013. Raúl MiderosDSS. Nov 22 2013. Raúl Mideros
DSS. Nov 22 2013. Raúl Mideros
 
Cambio de actitud
Cambio de actitudCambio de actitud
Cambio de actitud
 
DSS. Nov 20 2013. Jerry Spiegel
DSS. Nov 20 2013. Jerry SpiegelDSS. Nov 20 2013. Jerry Spiegel
DSS. Nov 20 2013. Jerry Spiegel
 
Historia de la Comunidad La Florida
Historia de la Comunidad La FloridaHistoria de la Comunidad La Florida
Historia de la Comunidad La Florida
 
Evaluacion final uml_grupo_200609_5
Evaluacion final uml_grupo_200609_5Evaluacion final uml_grupo_200609_5
Evaluacion final uml_grupo_200609_5
 
Curtain-Wall Staubschutz Brochure 2012
Curtain-Wall Staubschutz Brochure 2012Curtain-Wall Staubschutz Brochure 2012
Curtain-Wall Staubschutz Brochure 2012
 
La enseñanza media ¿prepara para el trabajo
La enseñanza media ¿prepara para el trabajoLa enseñanza media ¿prepara para el trabajo
La enseñanza media ¿prepara para el trabajo
 
El medio y medio
El medio y medioEl medio y medio
El medio y medio
 
Stellungnahme des DAV zum Delisting
Stellungnahme des DAV zum Delisting Stellungnahme des DAV zum Delisting
Stellungnahme des DAV zum Delisting
 
23 kubicek wien_dachli
23 kubicek wien_dachli23 kubicek wien_dachli
23 kubicek wien_dachli
 
El nebulizador
El nebulizadorEl nebulizador
El nebulizador
 

Similaire à Volkskrankheit "Stiefmuetterliche Indizierung"

Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsTorsten Kleiber
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Torsten Kleiber
 
Webinar - Boost your ABAP
Webinar - Boost your ABAPWebinar - Boost your ABAP
Webinar - Boost your ABAPCadaxo GmbH
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLFromDual GmbH
 
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Markus Flechtner
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerMarkus Flechtner
 
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...OPITZ CONSULTING Deutschland
 
Oracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im ÜberblickOracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im ÜberblickGFU Cyrus AG
 
SQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blindSQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blindAndre Essing
 
OptaPlanner hilft bei verteilten Schulstandorten
OptaPlanner hilft bei verteilten SchulstandortenOptaPlanner hilft bei verteilten Schulstandorten
OptaPlanner hilft bei verteilten SchulstandortenTorsten Fink
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaGeorg Knon
 
SplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunk
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunk
 
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Peter Kirchner
 
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server Optimierung
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server OptimierungUwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server Optimierung
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server OptimierungInformatik Aktuell
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 

Similaire à Volkskrankheit "Stiefmuetterliche Indizierung" (20)

Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Webinar - Boost your ABAP
Webinar - Boost your ABAPWebinar - Boost your ABAP
Webinar - Boost your ABAP
 
Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQL
 
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für Einsteiger
 
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
ADR Best Practices - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - Christian B...
 
Oracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im ÜberblickOracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im Überblick
 
SQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blindSQL Server Monitoring - Piloten fliegen auch nicht blind
SQL Server Monitoring - Piloten fliegen auch nicht blind
 
OptaPlanner hilft bei verteilten Schulstandorten
OptaPlanner hilft bei verteilten SchulstandortenOptaPlanner hilft bei verteilten Schulstandorten
OptaPlanner hilft bei verteilten Schulstandorten
 
Top 10 Internet-Trends
Top 10 Internet-TrendsTop 10 Internet-Trends
Top 10 Internet-Trends
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case Helvetia
 
SplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use CaseSplunkLive! Frankfurt 2016 - Helvetia Use Case
SplunkLive! Frankfurt 2016 - Helvetia Use Case
 
SplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case HelvetiaSplunkLive! Zürich 2016 - Use Case Helvetia
SplunkLive! Zürich 2016 - Use Case Helvetia
 
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
Spontan testen! Das eigene Test Lab, für jeden in der Cloud!
 
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server Optimierung
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server OptimierungUwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server Optimierung
Uwe Ricken – IT-Tage 2015 – Workshop: MS SQL Server Optimierung
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
Aug Karlsruhe
Aug Karlsruhe Aug Karlsruhe
Aug Karlsruhe
 

Volkskrankheit "Stiefmuetterliche Indizierung"

  • 1. Markus Winand Skalierung VOLKSKRANKHEIT “STIEFMÜTTERLICHE DATENBANK-INDIZIERUNG” 10/09/14 Markus Winand
  • 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. 2 - Durch Erfolg verursacht Copyright © 2013 Telerik, Inc. All rights reserved
  • 10. 3 - Nicht Dein Fehler http://simpsonswiki.com/wiki/File:I_Didn%27t_Do_It!_Volume_III.png
  • 11. Das Problem Query/Index Diskrepanz © 2014 by Markus Winand
  • 12. Quantifizierung des Problems Meine Beobachtung: ~50% der SQL-Performance-Probleme werden durch die Query/Index- Diskrepanz verursacht
  • 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. 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. 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. 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. Die Wurzel des Problems Indizierung findet zu spät statt Meist durch die falschen Personen © 2014 by Markus Winand
  • 18. Wurzel des Problems: Admins indizieren Wie haben Datenbanken vor SQL funktioniert?
  • 19. Wurzel des Problems: Admins indizieren Die Index-Nutzung war untrennbar mit den Abfragen verbunden.
  • 20. Wurzel des Problems: Admins indizieren Beispiel: dBase Entwickler mussten... ...Indizes bei Suchen explizit nutzen: !"#$%&'"($#)$*+!#,&+-" !!! $$$.%&'$/%&+&' Zwei Anweisungen ...Index-Wartung berücksichtigen: !"#$%&'"($#)$*+!#,&+-"0$%'(1
  • 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. 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. 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. 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. Wurzel des Problems: Admins indizieren Heute wird Indizierung oft als Tuning-Aufgabe betrachtet, die in die Verantwortung der Admins fällt.
  • 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. 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. Die Lösung Indizierung ist eine Entwicklungsaufgabe © 2014 by Markus Winand
  • 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. 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. 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. 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. 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. 3-Minuten Quiz: SQL-Indizierung Q1: Gut oder schlecht? (Funktionen) 234564$7894:$#;*,%'($<8$#;*$=!"#$%&'(>? @4A426$#"(#0$'+#",B)* $$C3<D$#;* $/E434$)*+,-!"#$%&'(.$F$1GHI?
  • 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. 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
  • 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. 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. 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)
  • 42. Nebenbei: Finger weg von OFFSET @4A426$%'0$'+#,B)* $$C3D$#;* $/E434$+$F$ $3943$]K$'+#,B)*$94@2 $A7D76$H !#$%'
  • 43. Nebenbei: Finger weg von OFFSET !#$% ist verlockend, aber böse. Sticker und Bierdeckel holen! http://use-the-index-luke.com/no-offset
  • 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. 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. 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. 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)( ''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • 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. 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. 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?
  • 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%*
  • 55.
  • 56.
  • 57.
  • 58.
  • 60.
  • 61. 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
  • 62. 3-Minuten Quiz: 60% fallen durch! Nur knapp 40% beantworten vier oder mehr Fragen richtig.
  • 63. (Mit Raten alleine würden 12.5% bestehen)
  • 64. 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.
  • 65. 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!
  • 66. Volkskrankheit: Stiefmütterliche Indizierung Legst Du Indizes einfach an oder designst du Indizes?
  • 67. Ü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
  • 68. Über Markus Winand use-the-index-luke.com