Dies ist meine Select-Abfrage.Oracle wählen Abfrage dauert lange
select count(m.uniq_no) cnt
from web_cst_mst m
inner join WEB_CST_INV i on M.UNIQ_NO=I.UNIQ_NO
where I.INV_NO='inv01'
and I.INV_DT=to_date('2015-01-12','YYYY-MM-DD')
and M.sel_tin='19320703277'
;
Ich habe einen Index für (uniq_no,sel_tin)
für web_cst_mst
Tabelle und einen Index für (uniq_no,inv_no,inv_dt)
für web_cst_inv
Tabelle erstellt.
Diese Abfrage dauert etwa 250ms. Früher habe ich 500ms gebraucht, als ich die Trimmfunktion für Verkäufer tin(trim(M.sel_tin))
hatte. Ich entfernte trim und es dauert die Hälfte der ursprünglichen Zeit, so dass ich denke, wenn ich to_date Funktion entfernen kann, dann könnte es weniger Zeit dauern, aber das Problem, das ich hier bin, ist ich sende ein Datum im String-Format, wie ich c#
Datum Variable senden kann in (10-JAN-14)
dieses Format, weil die c#
Datumsvariable auch Zeit hält. Ich habe den folgenden Code ausprobiert, nur um den Datumsteil zu senden, damit ich to_date Funktion in Orakel entfernen kann, aber es funktioniert nicht. Und die Daten in Oracle sind im Format (dd-MMM-yy ex:10-JAN-14)
gespeichert. Entweder muss ich nur den Datumsteil senden oder habe die Funktion to_date in der Abfrage.
Ich möchte nur den Datumsteil der Datetime-Variable senden, um die Leistung dieser Abfrage zu erhöhen. Aber ich kann das nicht erreichen.
Alle Vorschläge/Hilfe zur Verbesserung der Leistung. Vielen Dank.
DateTime inv_date = DateTime.ParseExact(inv_dt, "dd-MMM-yy", CultureInfo.InvariantCulture).Date;
Sie * sollte * parametrisierte Abfragen verwenden und tatsächliche Datetime-Werte anstelle von Zeichenfolgen übergeben, Konvertierungsfehler zu vermeiden . Zum Beispiel wird das von Ihnen erwähnte Format ('10-JAN-14') garantiert fehlschlagen * und * der Y2K-Fehler eingeführt. Das * wird jedoch nicht mit der Leistung helfen. 'to_date' wird auf eine einzelne Zeichenfolge angewendet, die zum Suchen in einem Index verwendet werden kann. 'Trim' muss andererseits auf * alle * Zeilen angewendet werden, was die Verwendung von Indizes verhindert. –
Haben Sie den SQL-Ausführungsplan angeschaut? –