Frage

Ich kann diese Abfrage verwenden, um alle Aufträge mit einem Datum, an einem Montag wählen:

SELECT * from orders WHERE strftime("%w", date)="1";

Aber soweit ich weiß, kann dies einen Index nicht beschleunigen verwenden, wie für jede Zeile strftime berechnet werden muss.

Ich kann ein zusätzliches Feld mit dem Wochentag gespeichert hinzufügen, aber ich will, es zu vermeiden. Gibt es eine Lösung, die Verwendung eines Index oder bin ich falsch und diese Abfrage fein tatsächlich funktioniert macht? (Das bedeutet, dass es nicht durch jede Zeile zu gehen hat, um das Ergebnis zu berechnen.)

War es hilfreich?

Lösung

Wenn Sie alle Montag je ein Feld oder sequentielle Scan benötigen würde. Was Sie tun können, ist für alle aktuellen Termine montags zum Beispiel berechnen innerhalb eines Jahres. Die Bedingung WHERE date IN ('2009-03-02', '2009-02-23', ...) würde Index verwenden

Andere Tipps

oder als Alternative zu vartec Vorschlag, einen Kalender Tabelle konstruiert nur ein Datum aus und einen Tag-Namen für jeden Tag im Jahr (beide indizieren) und dann Abfrage ausführen, indem ein gegen diese Tabelle JOIN tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top