Auf net|tuts+ wurde vor kurzem eine Übersicht mit mehr als 20 Performance Tipps und Tricks für MySQL veröffentlicht. Es sind einige grundlegende Tipps dabei, aber auch einige Tricks, die nicht jeder kennt. Wer mit MySQL arbeitet sollte sich auf jeden Fall mal etwas einlesen. Auch für Oracle oder MSSQL-User ist es sicher interessant, den einige Hinweise kann man problemlos adaptieren.
Kategorie: Datenbanken
MySQL Queries optimieren mit dem Jet Profiler
Guido hat vor kurzem über die kostenlose Version des Jet Profilers berichtet. Dabei handelt es sich um ein Tool, welches Datenbanken (MySQL u.a.) analysiert und die Trafficdaten auflistet. Dazu gehören etwa: offene Threads, Cacheverteilung, Cachehits, Queryübersicht, etc.
Das gute daran, langsame Querys werden angezeigt und man bekommt gleich Tipps zum verbessern der Lage geliefert. So kann man eine Webseite deutlich beschleunigen, langsame Querys können ganze Sekunden kosten. So kann man sicher einiges aus einer noch nicht optimierten Seite herausholen. Ein Top-Tool wie ich finde und ein Test der eigenen Seite kostet nichts, kann aber viel bringen :).

(Screenshot von Guido)
MT-COMPANY – SQL- und Windows-Seminare
Malcolm Toles ist Freiberuflicher Dozent und Entwickler und bietet über seine Firma MT-COMPANY MOC (Microsoft Official Curriculum) Seminare zu SQL, Windows Server etc. an:
SQL
- MOC 2778 – Querying and Processing Using SQL Server 2005 Transact-SQL
- MOC 2778A – Writing Queries Using Microsoft SQL Server 2008 Transact-SQL
- MOC 2781A – Designing Microsoft SQL Server 2005 Server Side Solution
- MOC 2782A – Designing Microsoft SQL Server 2005
- MOC 2783 – Designing the Data Tier for Microsoft SQL Server 2005
- MOC 2784A – Tuning and Optimizing Queries using Microsoft SQL Server 2005
- MOC 2786 – Designing Microsoft SQL Server 2005 Infrastructure
- MOC 2787 – Designing Security for Microsoft SQL Server 2005
- MOC 2788 – Designing High Availability database Solutions Using Microsoft SQL Server 2005
- MOC 4739B – Implementieren einer Microsoft SQL Server 2005 Datenbank
- MOC 4744B – Verwalten einer Microsoft SQL Server 2005 Datenbank
- MOC 6231A – Maintaining a Microsoft SQL Server 2008 Database
- MOC 6232A – Implementing a Microsoft SQL Server 2008 Database
XP & Vista
- MOC 2224B – Installieren, Konfigurieren und Verwalten von Microsoft Windows XP Professional
- MOC 5115 – Installieren und Konfigurieren von Windows Vista
Server
- MOC 2145B – Verwalten einer Windows Server 2003 Umgebung)
- MOC 2163B – Warten einer Windows Server 2003 Umgebung)
- MOC 2183A – Implementieren, Verwalten und Warten einer Microsoft Windows Server 2003 Netzwerkinfrastruktur)
- MOC 2190A – Planen und Warten einer Netzwerkinfrastruktur unter Microsoft Windows Server 2003)
- MOC 2195A – Planen, Implementieren und Warten einer Active Directory Infrastruktur unter Microsoft Windows Server 2003)
- MOC 2238A – Implementieren und Verwalten der Sicherheit in einem Microsoft Windows Server 2003 Netzwerk)
Wenn ihr also mal in dieser Richtung Hilfe braucht, wendet euch einfach an ihn ;).
Oracle Check Constraint: 3 Felder und nur eins darf gesetzt sein (quasi XOR)
Ich brauchte letztens ein Oracle Check Constraint, um zu prüfen, dass von 3 Feldern in denen IDs stehen, genau eins gesetzt ist, das heißt, es dürfen weder zwei oder alle drei Felder gefüllt sein, noch keins. Immer genau eins. Nur wie erledigt man das? Foreign Keys sind hier nicht wirklich geeignet, man muss sich also selber was ausdenken. Zum Glück gibt es ja nette Funktionen und die Constraints, hier nutzen wir eine Check Constraint:
SQL> CREATE TABLE TEST_TABLE 2 (COL1 VARCHAR2(10), 3 COL2 VARCHAR2(10), 4 COL3 VARCHAR2(10), 5 SOME_VAL VARCHAR2(10), 6 CONSTRAINT CHECK_NULL 7 CHECK (NVL2(COL1,1,0)+NVL2(COL2,1,0)+NVL2(COL3,1,0)=1)); TABLE created. SQL> INSERT INTO test_table VALUES (NULL,NULL,NULL,'ww'); INSERT INTO test_table VALUES (NULL,NULL,NULL,'ww') * ERROR at line 1: ORA-02290: CHECK constraint (SCOTT.CHECK_NULL) violated SQL> INSERT INTO test_table VALUES (NULL,'1','dsdsd','ww'); INSERT INTO test_table VALUES (NULL,'1','dsdsd','ww') * ERROR at line 1: ORA-02290: CHECK constraint (SCOTT.CHECK_NULL) violated SQL> INSERT INTO test_table VALUES (NULL,NULL,'1','ww'); 1 row created. SQL>
Wie man sehen kann funktioniert unsere Check Constraint NVL2(COL1,1,0)+NVL2(COL2,1,0)+NVL2(COL3,1,0)=1 perfekt. NVL2 prüft einen gegebenen Wert auf NULL und liefert entsprechend entweder den 2. Parameter zurück (Wert != NULL) oder den 3. Parameter der Funktion (Wert == NULL). Addiert man diese Werte auf, muss das Ergebnis 1 lauten, falls genau ein Feld gefüllt ist, jedes andere Ergebnis zeigt einen Fehler an. Durch diesen kleinen Trick kann man das Problem elegant lösen :).
Hinweis: Statt NVL2 kann man auch DECODE nutzen.




