Ich wollte wissen, ob wir irgendeine Technik haben, mit der wir den Wert berechnen können, der für eine LIMIT-Klausel des Massensammelvorgangs gesetzt werden musste. Zum Beispiel, sagen wir, unser Cursor hat 10 Millionen Datensätze..Was ist der Wert, den wir für die LIMIT-Klausel setzen können, um optimale Leistung zu haben. Können wir es irgendwie berechnen?Einen Wert für LIMIT während der Verwendung von Massensammeln setzen
decalre
cursor c_emp is <some select query>
var <variable> ;
begin
open c_emp;
loop
fetch c_emp bulk collect into var limit 2;
exit when c_emp%NOTFOUND;
end loop;
close c_emp;
end;
Die Größe der Zeile ist auch ein Faktor und die Menge des verfügbaren Sitzungsspeichers angesichts der Anzahl der Sitzungen, die wahrscheinlich gleichzeitig ausgeführt werden. Ich weiß nicht, welche anderen Faktoren notwendig wären, um ein vollständiges Bulk-Fetch-Optimierungsmodell zu erstellen, aber normalerweise erhalten Sie abnehmende Renditen über einige hundert Zeilen hinaus. –
Wie bei allem, ist der beste Ansatz, Benchmarks in Ihrer Umgebung mit Ihren Daten zu vergleichen. Normalerweise wird etwas zwischen 100 und 1000 ziemlich optimal sein. Wenn Sie statt einer expliziten einen impliziten Cursor verwendet haben, würde Oracle automatisch 100 Zeilen gleichzeitig unter dem Deckblatt abholen. –