Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
db:mysql:performance [2019/10/13 15:56] webproducer angelegt |
db:mysql:performance [2020/09/15 11:29] (aktuell) webproducer Tipp Nummer 6 ergänzt |
||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
- Alle Datenfelder, die mit der WHERE-Anweisung gesucht werden, einem Index "KEY" hinzufügen | - Alle Datenfelder, die mit der WHERE-Anweisung gesucht werden, einem Index "KEY" hinzufügen | ||
- | - Beim SELECT auf das * verzichten, sondern nur die benötigten Felder explizit angeben | + | - Beim SELECT auf das Wildcard * verzichten! Stattdessen nur die benötigten Felder explizit angeben. Hintergrund ist, dass der Index bei indizierten Datenbankfeldern nur greift, wenn diese Felder im SELECT angegeben wurden. |
- Nach Möglichkeit auf Funktion wie z. B. DATE() verzichten, da mySQL sonst vorher die Tabelle temporär dupliziert | - Nach Möglichkeit auf Funktion wie z. B. DATE() verzichten, da mySQL sonst vorher die Tabelle temporär dupliziert | ||
- Nach Möglichkeit auf ORDER BY und GROUP BY verzichten: Doppelte Einträge lieber durch [[distinct|DISTIINCT]] vermeiden | - Nach Möglichkeit auf ORDER BY und GROUP BY verzichten: Doppelte Einträge lieber durch [[distinct|DISTIINCT]] vermeiden | ||
- Sub-Selects lieber in der Programmiersprache, z. B. PHP lösen anstatt in SQL | - Sub-Selects lieber in der Programmiersprache, z. B. PHP lösen anstatt in SQL | ||
+ | - Nach dem gleichen Datei-Typen suchen, der auch in der Datenbank angelegt wurde! Wenn z. B. ein UNIX_TIMESTAMP in der Datenbank als STRING angelegt wurde ist die folgende Suche zu vermeiden: ...WHERE timestamp = 1584199620. Stattdessen sollte der Timestamp in einfachen Anführungszeichen stehen. Dadaurch sind z. B. beim Tabellen mit 360 Mio. Zeilen eine Zeitersparnis von über 35 Sekunden pro Aufruf möglich!! | ||