Frage

Ich möchte den Leistungsunterschied bei der Aktualisierung einer Tabelle mithilfe der folgenden Methode kennenlernen:

UPDATE films SET kind = 'Dramatic' WHERE CURRENT OF c_films;

oder wie das:

UPDATE films SET kind = 'Dramatic' WHERE unique_indexed_int_column = 3000;

Hat jemand dies getestet oder gewusst, wie Updates mit Cursors funktionieren, damit er dies kommentieren kann?

EDIT: Ich habe dies jetzt mit dem Benchmarked und festgestellt, dass es sich um ein Drittel schneller handelt, um das neueste Beispiel zu machen. Ich habe jede der Anfragen 100000 Mal durchgeführt und den Unterschied zeitlich geplant. Ich habe PSYCOPG2 verwendet, um Server -Side -Cursor zu verwenden, um mit Postgres zu kommunizieren. Ich werde weiter untersuchen, ob ich feststellen kann, dass dies nicht immer der Fall ist.

War es hilfreich?

Lösung

Ich bin mit PostgreSQL nicht vertraut, daher kann ich Ihnen nur eine generische Antwort geben.

Zuerst aus der Obst, wenn indexed_int_column ist nicht eindeutig, die zweite Anweisung aktualisiert mehrere Zeilen, während die erste nur die derzeit unter dem Cursor aktualisierte Zeile aktualisiert c_films. Die Aussagen sind also nicht identisch.

Unter der Annahme der Einzigartigkeit und dem Cursor C_Film indexed_int_column = 3000, Die Aktualisierung sollte sehr schnell sein, sobald der Cursor unter einer bestimmten Zeile positioniert ist, da der Cursor die Informationen enthält, um direkt auf den physischen Standort dieser Zeile zuzugreifen. Die zweite Aussage muss jedoch zuerst den Index abrufen, den Wert 3000 darin suchen und erst dann den physischen Standort der Zeile zu aktualisieren. Trotzdem musste diese Lookup -Operation an einem Punkt für den Cursor durchgeführt werden (wenn wir nicht über den gesamten Tisch iteriert wurden). Im Allgemeinen zahlt es sich nur aus, den Cursor zu verwenden, wenn Sie die Daten sowieso zuerst lesen müssen, und dann dieselbe Zeile aktualisieren möchten, die Sie gerade gelesen haben.

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