Haben Sie einen Index für EVENT_DATE? Wenn Sie dies nicht tun, haben Sie einen vollständigen Tabellenscan und das ist so schnell wie es geht, ohne einen Index zu erstellen.
Wenn Sie einen Index haben, wird Ihre Abfrage ihn nicht verwenden, weil der to_char()
ihn deaktiviert. Lassen Sie uns annehmen, dass Ihre Tabelle genügend unterschiedliche Daten enthält und dass sie ausreichend verklumpt sind, um einen Index sinnvoll zu nutzen. Sie können die Abfrage so ändern, dass ein Index auf verschiedene Arten verwendet wird.
Wenn EVENT_DATE enthält nur das Datum Element dieses verwenden
where event_date = date '2016-04-08'
Wenn EVENT_DATE ein Zeitelement dieses
where event_date >= date '2016-04-08'
and event_date < date '2016-04-09'
Beachten Sie, dass Oracle speichert DATE Werte in besonderer Weise verwenden enthält. Sie werden nicht mit einer bestimmten Maske gespeichert. Formatierung ist nur eine Display-Sache. Alles, was wir tun müssen, ist das Zieldatum in einem sinnvollen Format zu übergeben.
Warum machst du ein 'to_char' auf' event_date' was ich vermute, ist ein 'date' anstatt ein' to_date' in der Zeichenkette zu machen? Versuchen Sie, die Zeitkomponente von 'event_date' auf Mitternacht zu setzen? Welche Index (e) sind verfügbar? Ist 'event_date' indiziert? Welche Indizes sind in der Tabelle definiert? –
Ich denke du willst den ganzen Tag. Versuchen Sie: 'Wählen Sie Anzahl (*) als von Ereignis wobei eventName = 'ARTICLE' und event_date zwischen to_date ('08 -04-2016 ',' tt-mm-yyyy ') und to_date ('09 -04- 2016 ',' dd-mm-yyyy ') ' – dcieslak
Bitte geben Sie Ihre Tabellenstruktur (einschließlich der Indizes) und den EXPLAIN-Plan Ihrer Anfrage an – Aleksej