2009-07-04 2 views
3

Ich bezweifle die Geschwindigkeit und das Ergebnis der unten stehenden Abfragen. Kann mir jemand die Erklärung geben? (Diese Abfragen für Oracle-Datenbank geschrieben)Leistung zwischen SELECT MAX (col_name) und ROWNUM = 1

Sagen wir, ich habe eine Tabelle table1 (ID, itemID, trnx_date, Balance, ...). Ich möchte das letzte Guthaben eines Artikels erhalten.

Abfrage 1:

SELECT Saldo aus Tabelle 1 WHERE ID = (SELECT MAX (ID) von Tabelle 1 WHERE itemID = ITEM_ID);

Abfrage 2:

SELECT Saldo aus Tabelle 1 WHERE itemID = ITEM_ID UND rownum = 1 ORDER BY ID DESC;

wo ITEM_ID ist die Variable.

Also geben diese beiden Abfragen das gleiche Ergebnis? Und welche ist schneller oder gibt es eine andere Abfrage, die schneller ist als sie?

Dank

Antwort

2

Rownum in Oracle (früher mein Fehler, ich habe Oracle in einem Bit nicht verwendet) vor der Art berechnet. So ist diese Abfrage mit dem ersten identisch:

SELECT 
    balance 
FROM 
    (SELECT balance FROM table1 WHERE itemID = *item_id* ORDER BY ID DESC) 
WHERE 
    rownum = 1; 

In diesem Fall wird ein Index für ID, diese leicht schneller sein kann.

Warum haben Sie sie nicht einfach selbst ausgeführt, um sie zu benchmarken?

+0

Danke Eric für Ihre Antwort, aber wie ich weiß, ist die Prozessreihenfolge der SELECT-Anweisung FROM, WHERE, ORDER BY, dann SELECT. Wenn also die Bedingung gefunden wird, wird sie aufhören, Datensätze zu finden (wegen ROWNUM = 1) und dann das Ergebnis sortieren, so dass das Ergebnis nicht dasselbe sein wird. Ich habe eine andere Tabelle Daten getestet, und das Ergebnis ist anders !!! –

Verwandte Themen