Halihallo Stephan
Jedoch, wenn du eine einfache Abfrage, wie z. B. WHERE
drehzahl_min<=drehzahl_gewünscht-50 und drehzahl_max>=drehzahl_gewünscht+50
vorschaltest, wird der QueryOptimizer evtl. den Index verwenden können und so die
relevanten Daten zuerst auslesen, bevor komplexere Berechungen durchgeführt werden.So ungefähr dachte ich mir das auch, und habe es über das Wochenende ausprobiert. Das Problem dabei ist, daß das nur über einen mehrspaltigen Index funktionieren würde (über drehzahl_min, drehzahl_max, drehmoment_min, drehmoment_max).
Wie kommst du zu dieser Schlussfolgerung? - In deinem Falle sind Indizies für jede
Spalte sinnvoller.
Der geht aber, soweit ich die MySQL-Dokumentation verstande habe (ausprobiert habe ich es auch), nur, wenn der Query nur aus AND-Bedingungen besteht, wo in jedem einzelnen Teil dann immer ein Teil des Index vorkommen muß.
http://www.mysql.com/doc/de/MySQL_indexes.html
In dem Query ist aber immer notwendig ein OR, weil die Kurve ja steigend oder fallend sein kann, d.h. der erste oder der zweite Punkt kann unter dem gesuchten Grenzwert liegen, deswegen bin ich mir relativ sicher, daß ich keinen Index verwenden kann. (d.h. wenn ich nur Intervalle suche, wo beide drüber liegen, was mit einem mehrspaltigen Index gehen würde, lasse ich notwendig einige Möglichkeiten aus)
Was geschieht, wenn du für jede Spalte einen Index anlegst?
Versucht einmal ein
EXPLAIN SELECT ...
der gibt Auskunft, ob der Index dann verwendet werden kann. IMHO sollte das auch bei
OR-Verknüpfungen keine Rolle spielen, ist einfach eine Vereinigung der Teilmenge der
passenden Index-Einträge deiner Abfrage, das sollte der QueryOptimizer von MySQL
IMHO verstehen. Aber vielleicht unterlässt er es, da er a) schon davon ausgeht, dass
die Vereinigungsmenge keinen Performancegewinn mehr bringt (full table scan schneller)
oder b) dass er merkt, dass mehr als 30% der Daten selektiert werden würden.
Vielleicht hast du noch Zeit und Lust dies auszuprobieren, ein Ergebnis würde mich auf
jeden Fall interessieren, ansonsten...
... Viele Grüsse
Philipp