ich eine Abfrage haben, die zwei Reihen holt -DESC auf gleiche Werte geändert plötzlich
SELECT tb.type,
tb.value,
tb.comp,
tb.start_date,
tb.end_date,
tb.newdays,
tb.modif_date
FROM table_name tb
WHERE tb.start_date <= sysdate
AND tb.end_date >= sysdate
AND tb.VALUE='ABC'
ORDER BY tb.value,
tb.type DESC
Nun ist diese in dieser Form führen bisher verwendeten
+------+-------+------+------------+-----------+---------+------------------+
| TYPE | VALUE | COMP | START_DATE | END_DATE | NEWDAYS | MODIF_DATE |
+------+-------+------+------------+-----------+---------+------------------+
| N | ABC | ** | 10-Mar-16 | 31-Dec-99 | 4 | 10/03/2016 10:05 |
| N | ABC | ** | 07-Mar-16 | 31-Dec-99 | 6 | 07/03/2016 23:23 |
+------+-------+------+------------+-----------+---------+------------------+
Kürzlich bemerkte ich die Ausgabe nun wie folgt ist (6 oberhalb und unterhalb 4)
+------+-------+------+------------+-----------+---------+------------------+
| TYPE | VALUE | COMP | START_DATE | END_DATE | NEWDAYS | MODIF_DATE |
+------+-------+------+------------+-----------+---------+------------------+
| N | ABC | ** | 07-Mar-16 | 31-Dec-99 | 6 | 07/03/2016 23:23 |
| N | ABC | ** | 10-Mar-16 | 31-Dec-99 | 4 | 10/03/2016 10:05 |
+------+-------+------+------------+-----------+---------+------------------+
Wenn ich die ORDER BY-Klausel tb.type
entfernen . Das Ergebnis ist wieder normal (4 an der Spitze zu sein)
Verwirrung-
1. Warum/Wie kam es plötzlich verändert?
2. Obwohl tb.type gleich ist, d. H. TYPE='N'
, warum sortiert/sortiert die Datenbank? Da beide Werte gleich sind, sollte keine Bestellung stattfinden, oder?
* EDIT - Wenn ich tb.type entfernen, die Art ist wieder normal. Aber wenn ich es zurückstelle, setzt die Sorte 6 an die Spitze. *
Dies bedeutet, dass die Sortierung nicht beliebig ist.
Meine Analyse - der Regel so, wie es in indizierte Struktur gespeichert wird verwendet, wenn zwei Werte gleich sind. Aber das letzte DDL-Datum (Neuerstellungsdatum) für den Index ist das Jahr 2015. Dies bedeutet, dass der Index immer noch derselbe ist.
Jede Idee, warum dies geschieht?
Ist das 'last_analyzed' Datum in' user_tables' oder 'user_indexes' die Zeit, das Verhalten geändert zu reflektieren? Ich kann mir vorstellen, dass Oracle eine Analyse durchgeführt hat, die den Ausführungsplan geändert hat (aufgrund der Aktualisierung der Statistiken). Es könnte sich lohnen, den Ausführungsplan für die Abfrage jetzt mit und ohne die 'tb.type'-Reihenfolge zu betrachten, und wenn Sie den Plan abrufen können, der vor der Änderung für die echte Abfrage verwendet wurde. Aber letztendlich waren Sie 'glücklich', das Ergebnis zu erhalten, das Sie bisher erwartet haben; Gordon hat Recht, die Reihenfolge der Ergebnisse ist unbestimmt, dann sind Typ und Wert gleich. –
Siehe auch: [Order in the court!] (Http://tkyte.blogspot.co.uk/2005/08/order-in-court.html) für Tom Kytes viel zitierte Abhandlung zu diesem Thema. –
@AlexPoole Das last_analyzed ist das Datum von gestern. Es analysiert alle 7 Tage, schätze ich. –