PHP Portal » Blog Archiv 12/2009

nutze ENUM vor VARCHAR oder CHAR

Die MySQL Typen CHAR und VARCHAR werden genutzt um kleine Texte bzw. Wörter in der Datenbank zu speichern. Um dies effizient zu machen, sollte man sehen ob man nich an deren Stelle ein ENUM nutzen kann.
So kann z.B. ein Kennzeichen für den Status vorhanden sein mit den Werten 'angelegt', 'freigesch

» mehr lesen

analyse die Tabellen

Mit der Prozedur ANALYSE() gibt MySQL die Möglichkeit die Tabelle zu untersuchen, und macht dabei Vorschläge für optimierte Tabellenspalten.
Wenn zum Beispiel eine Spalte als CHAR definiert ist, und sie nur ein paar unterschiedliche Werte enthält, ist es besser die Spalte als ENUM zu definieren.
B

» mehr lesen

benutze wenn möglich NOT NULL

Der Wert NOT NULL ist in den meisten Fällen nicht nötig. Meist macht es keinen Unterscheide, ob ein einer Spalte "0" oder "NULL" bzw. ein Leerstring oder "NULL" enthalten ist.
Beim Speichern innerhalb von MySQL gibt es aber einen Unterschied im Platzbedarf. Eine Spalte, welche nicht NOT NULL defini

» mehr lesen

benutze gleiche Typen bei JOINS

Wenn man einen JOIN ausführt, muss MySQL ja logischer Weise die Daten in den Spalten miteinander vergleichen. Die Spalten über welche der JOIN abgearbeitet wird, sollten dabei vom selben Type sein.

Code
1
2
3
SELECT bar.foo FROM bar INNER JOIN bar2 ON ( bar.spalte = bar2.spalte )

Wenn

» mehr lesen

indiziere Spalten zum Suchen

Spalten, welche in Where Bedingungen genutzt werden sollten mit einem Indix versehen werden. Hat eine Spalte ein Index kann MySQL beim suchen auf das Scannen der Spalte verzichten und benutzt stattdessen den weit schnelleren Index.
Dies gilt nicht nur für Vergleiche mit dem gesamten Feldinhalt, son

» mehr lesen

Untersuche die Abfragen mit EXPLAIN

Mit EXPLAIN zeigt MySQL genau an, wie es eine Abfrage ausführt. Dabei werden die genutzten wie auch nicht genutzten Indizes angezeigt. Des Weiteren gibt EXPLAIN Auskunft darüber wie die Tabellen gescannt und sortiert werden. Alles in allem eine gute Möglichkeit Flaschenhälse und Strukturfehler zu fi

» mehr lesen

vermeide SELECT *

Das Abfragen sämtlicher Spalten in einer SELECT-Anweisung ist in 99% aller Fälle überflüssig. Meist benötigt man nur bestimmte Spalten, dann sollte man auch nur diese Spalten abfragen. Natürlich ist es als Programmierer einfacher einfach ein "SELECT *" zu nutzen, als jeder benötigte Spalte einzeln z

» mehr lesen

LIMIT 1 für einem einzelnen Datensatz

Wenn man einen einzelnen Datensatz abfragen will, ist es von Vorteil die Abfrage mit "LIMIT 1" zu begrenzen. Dadurch wird dem MySQL Server mitgeteilt, das er nach dem Finden des ersten Datensatzes mit dem Scannen der Tabelle(n) aufhören kann.

PHP Code
1
2
// die gesamte Tabelle wird gescannt $result =

» mehr lesen

sortiere nicht nach RAND() in MySQL

Wenn man einen beliebigen Datensatz aus einer Tabelle erhalten möchte, greifen viele zur schönen Funktion RAND() und begrenzen das Ergebnis mit LIMIT 1. Natürlich funktioniert dies, ist aber bei größeren Tabellen extrem ineffizient. MySQL kann in diesem Falle für das Sortieren keinen Index nutzen un

» mehr lesen

mein Adventskalender - MySQL optimieren

Hallo,
hier entsteht jetzt mein ganz persönlicher Adventskalender. Es erfolgt jetzt jeden Tag eine Information, wie man Abfragen einer MySQL Datenbank beschleunigen kann.

Tipp 1: Nutzt den Query Cache

Der Query Cache von MySQL speichert die Ergebnisse von Abfragen zwischen, und liefert

» mehr lesen