Hallo Matthias,
- Sind Indizes notwendig und sinnvoll oder eher kontraproduktiv?
Das hängt von deinem Anwendungsfall ab. Wenn es so ist, wie ich rate (fast 100% lesender Zugriff), dann ist ein Index durchaus sinnvoll. Allgemeinplatz: ein Index macht bei großen Datenmengen Sinn, wenn regelmäßig lesend über diesen Pfad zugegriffen wird. Ausnahmen bestätigen die Regel.
- Mein Gefühl sagt mir, dass
BETWEEN
schneller sein wird. Gibt es da Erfahrungswerte?
Irrelevant. Selbst wenn es einen Unterschied im execution plan (hint EXPLAIN
) gäbe, würde ihn der Optimizer weg optimieren. Schreib was lesbarer ist.
Da es theoretisch nur maximal einen passenden Datensatz gibt, werde ich
LIMIT 1
verwenden. Bricht MySQL tatsächlich nach dem ersten Fund ab?
Das mit dem abbrechen ist so eine Sache. Das ist sehr stark abhängig von der Query. Bei so einer simplen Query dürfte das der Fall sein, ja. Bei anderen Queries muss erst ein Result Set gebildet werden, dass dann truncated wird. Deine Frage lässt sich so allgemein nicht beantworten. EXPLAIN
bzw EXPLAIN EXTENDED
wird dir hier mehr verraten. EXPLAIN
ist eines der wichtigsten Tools im Bereich Datenbanken als Anwendungsentwickler! :-)
Die Spezifikation sagt nur „If you select only a few rows with LIMIT, MySQL uses indexes in some cases when normally it would prefer to do a full table scan.“ Also Indizes verwenden?
Siehe oben ;-)
- Gibt es ggf. eine andere Möglichkeit, das Durchsuchen der Tabelle nach dem ersten Fund abzubrechen?
Nein. Ob „abgebrochen” werden kann, muss der Query Optimizer entscheiden. In diesem Fall würde ich mir allerdings keine Sorgen machen.
LG,
CK