Halihallo Stephan
Nun, du möchtest die Daten interpolieren.
Ja, aber nur linear zwischen jeweils zwei Meßpunkten. Auf die Meßdaten selbst verlasse ich mich. Es geht nur darum, daß ein Punkt die Leistung bei 300 U/min ist, der nächste bei 400 U/min, und wenn nun jemand nach allen Motoren sucht, die bei 366 U/min eine bestimmte Leistung haben, dann muß ich zwischen den beiden linear interpolieren - in der where-Bedingung, nicht nachher. Deswegen habe ich in jeder Tabellenzeile jeweils zwei aufeinanderfolgende Meßwerte, drehzahl_min/leistung_min und drehzahl_max/leistung_max:
OK, _jetzt_ verstehe ich (zumindest das?) ;)
(leistung_min+(leistung_max-leistung_min)/(drehzahl_max-drehzahl_min)*(100-drehzahl_min))>3
Das ist die lineare Interpolation zwischen zwei Meßpunkten, 100 ist der Drehzahlwert, den der Benutzer eingegeben hat.
Nur aus interesse: Woher kommt die Drei? - Ist das eine von dir festgelegte Schwelle?
Ich mache jetzt bei ein paar komplizierteren Abfragen, wo ich noch mehrere große Tabellen dazujoine, vorher eine einfachere Abfrage, die die genaue Abfrage ausreichend limitiert, das reicht von der Performace dann aus.
Das war u.a. mein Vorschlag. Vielleicht hast du es bereits auch schon:
(leistung_min+(leistung_max-leistung_min)/(drehzahl_max-drehzahl_min)*(100-drehzahl_min))>3
ist eine "komplexe" Berechnung, die natürlich nicht über den Index verarbeitet werden
kann. 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. Wie
bereits gesagt: Das Ziel ist, möglichst viel bereits vorher rauszuschmeissen.
Viele Grüsse
Philipp