Stellen Sie sich vor, ich habe eine Tabelle, die alle Kapitel eines Buches und die Anfangs- / Endseite jedes Kapitels enthält.
%Vor%Ich versuche herauszufinden, auf welches Kapitel eine zufällige Seite fällt, sagen wir zum Beispiel Seite 215.
Meine erste Idee war eine Abfrage wie diese zu verwenden
%Vor%Leider kann MySQL die Indizes in der obigen Abfrage nicht nutzen, was wegen der großen Größe meiner Tabelle ein großes Problem ist.
Nachdem ich einige Nachforschungen angestellt hatte, kam ich auf diese Abfrage, die Indizes nutzt.
%Vor%Das Problem besteht nun darin, dass ich mehrere zufällige Seiten abfragen und dabei Indizes nutzen kann. Es scheint nicht wahrscheinlich, dass ich meine letzte Abfrage ändern kann, da sie so stark darauf angewiesen ist, die Ergebnisse auf eins zu beschränken.
Jeder Rat würde sehr geschätzt werden!
UPDATE: Dank eines Kommentars von Ray Toal habe ich eine Anfrage, die mir die Ergebnisse liefert, die ich mit erstaunlicher Leistung brauche.
%Vor%Fügen Sie zwei zusammengesetzte Indizes hinzu:
%Vor%Und fahren Sie mit Ihrer ursprünglichen Abfrage fort:
%Vor%MySQL wählt den Index, der mit der Spalte führt, die ihm die wenigsten verbleibenden Zeilen zum Scannen gibt, und dann wird ein zweiter Teil des Index auf die einzelne gewünschte Zeile reduziert (ohne einen Scan).
> Syntaktisch gültiges Äquivalent von Bohemys INTERSECT
Solution (erfordert einen eindeutigen Index einer Art und eines großen Join-Puffers):
Oder eine verführerische Methode (erfordert einen einzigen Index für jede der Seiten start_page und end_page):
%Vor%