sayso Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 Hallo zusammen, ich habe ein kleines Problem und bin mir sicher das ihr mir helfen könnt. Ich habe eine Tabelle TAB1 in der folgende Datensätze sind (ich weiss aber nicht ob sie sortiert in den Datenbank liegen). TAB1: DAT BELNR JAHR 010 111111 2005 010 111112 2006 010 111113 2006 Nun wollte ich sehen ob die Datensätze aufsteigend nach BELNR in der Tabelle liegen. Wenn ich mit sqlplus einen select ausführe ("select BELNR from TAB1") dann sehe ich die BELNR sortiert. Mache ich das Statement über den OEM mittels view/edit content dann sehe ich die BELNR unsortiert (also erst 111113 und dann 111111 und dann 111112). Sortiert der SQLPLUS von sich aus, oder stellt es mir die Funktion aus dem OEM falsch dar?? Ich bin etwas vewirrt, wenn die Jungs aus der Applikation die Datensätze mittels "select * from TAB1" machen, dann bekommen sie diese auch unsortiert.. von daher gehe ich davon aus das der sqlplus sortiert... Kann ich ihm das irgendwie austreiben? oder gibt es evtl. ein anderes Problem? Die Tabelle hat natürlich noch mehrere Felder... aber die Schlüßelfelder sind DAT BELNR und JAHR... Würdet mir echt helfen Datenbank ist eine Oracle 9.2. Patchset 7 und auf den Feldern liegt auch ein Index... Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 In einer Relationalen Datenbank wird von sich aus erstmal nix sortiert. Du musst immer order by angeben. Kann sein das SQLPLUS von sich aus einzelne Spalten oder Primärschlüssel sortiert, aber warum willst du das deaktivieren? Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 13. Juni 2006 Autor Teilen Geschrieben 13. Juni 2006 In einer Relationalen Datenbank wird von sich aus erstmal nix sortiert. Du musst immer order by angeben. Kann sein das SQLPLUS von sich aus einzelne Spalten oder Primärschlüssel sortiert, aber warum willst du das deaktivieren? Gruß Jaraz Hallo Jaraz, habe nun etwas anderes festgestellt... Mach ich einen "select * from TAB1" kommen die Daten unsortiert... mache ich allerdings einen "select BELNR from TAB1" kommt BELNR sortiert... Der Index liegt über folgenden Feldern: DAT BELNR JAHR Ich möchte es nicht deaktivieren, aber da die Jungs aus der Anwendung keinen Sort in ihre Applikation implentiert haben und sich auf die sortierte Tabelle verlassen haben stehen wir nun vor einem problem. Ich möchte einfach sehen wie die Datensätze in der DB liegen.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 Ich möchte einfach sehen wie die Datensätze in der DB liegen.... das ist speziell bei oracle nur über die ROWID (und tiefergehende berechnungen damit) möglich. ansich ist nicht vorhersehbar, in welcher reihenfolge daten (welche ohne ORDER BY selectiert wurden) daherkommen, da sich speicherplätze der zeilen über tablepaces und instanzen hinweg ändern können. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
isardor Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 achso, also willst du doch alle Spalten ausgeben, aber ohne order by sortiert haben? Das geht nicht. Da müssen die Jungs wohl doch noch eine Sortierung ins Programm einbauen. Alternative: einen View erzeugen der sortiert und den im Programm abfragen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 13. Juni 2006 Autor Teilen Geschrieben 13. Juni 2006 achso, also willst du doch alle Spalten ausgeben, aber ohne order by sortiert haben? Das geht nicht. Da müssen die Jungs wohl doch noch eine Sortierung ins Programm einbauen. Alternative: einen View erzeugen der sortiert und den im Programm abfragen. Hallo, wenn ich über den Index selektiere (also keinen FULL Table Scan), dann kommen die Daten sortiert ... wie kommt das zu stande? Gruß und danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 wenn ich über den Index selektiere (also keinen FULL Table Scan), dann kommen die Daten sortiert ... wie kommt das zu stande? weil der optimierer automatisch einen INDEX SCAN macht, es sei denn du gibst ihm einen OPTIMIZER HINT, z.b. den NO_INDEX. kannst du deinen QUERY PLAN posten? s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 13. Juni 2006 Autor Teilen Geschrieben 13. Juni 2006 weil der optimierer automatisch einen INDEX SCAN macht, es sei denn du gibst ihm einen OPTIMIZER HINT, z.b. den NO_INDEX. kannst du deinen QUERY PLAN posten? s'Amstel Hallo, hier der QUERY_PLAN: select * from TB1 where numrow < 666666; 1) <SCHEMA>.TB1 TABLE ACCESS FULL 2) COUNT STOPKEY (da ich ein numrow mitgebe, da die Tabelle zuviele Einträge hat) 3) Select Statement (Costs: 746,848) select DAT,BELNR,JAHR,BESCH from TB1 where numrow < 666666; 1) <SCHEMA>.TB1~0 INDEX FULL SCAN 2) COUNT STOPKEY (da ich ein numrow mitgebe, da die Tabelle zuviele Einträge hat) 3) Select Statement Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 was ist NUMROW? ich kenne nur ROWNUM. versuchs mal mit SELECT /*+ NO_INDEX(TB1 dein_zusammengesetzter_index) */ DAT, BELNR, JAHR, BESCH from TB1; s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 13. Juni 2006 Autor Teilen Geschrieben 13. Juni 2006 was ist NUMROW? ich kenne nur ROWNUM. versuchs mal mit SELECT /*+ NO_INDEX(TB1 dein_zusammengesetzter_index) */ DAT, BELNR, JAHR, BESCH from TB1; Hallo, ja ich meinte ROWNUM - ich tippe leider alles ab, da ich aus Java Oberfläche (OEM) nicht kopieren kann :-\ Wenn ich den NO_INDEX angebe macht er trotzdem einen Indexscan mittes <SCHEMA>.TB1~0. Aber die entscheidende Frage ist: Warum sortiert er mir die Ausgabe aufsteigend wenn er einen Full Indexscan macht und warum bekomm ich sie unsortiert beim FULL Table Scan... Arbeitet der Indexscan anders, so das er bei niedrigsten Wert anfängt und sich dann nach oben arbeitet? Mein SQL-Statement mit NO_Index war so: SELECT /*+NO_INDEX(HOLT.TB1~0)*/ DAT,BELNR,JAHR,BESCH from HOLT.TB1 where numrow < 666666; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The_red_one Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 Die garantiert einfachste Lösung deines problems ist, dass eure Programmierer an den select, mit dem sie die Daten aus der DB holen, einen "order by" anhängen, oder du einen sortierten View generierst auf den sie zugreifen können (Orginaltabelle Name ändern, View wie Tabelle nennen, den Feldern im View nen identischen alias verpassen wie dieTabfelder hießen, und schon kriegen deine Programmierer ohne Änderungsaufwand die Daten sortiert.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 13. Juni 2006 Autor Teilen Geschrieben 13. Juni 2006 Die garantiert einfachste Lösung deines problems ist, dass eure Programmierer an den select, mit dem sie die Daten aus der DB holen, einen "order by" anhängen Das werden sie auch tun :-P aber mich interessiert es trotzdem warum es ein anderes ergebniss liefert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 aber mich interessiert es trotzdem warum es ein anderes ergebniss liefert möglicherweise wird auch ein "index fast full scan" gemacht, während dein (zugegebenermassen, befremdlicher, explain plan) einen "index full scan" anzeigt. es kommt teilweise auch darauf an, um welche art index es sich handelt (b-baum, domain, bitmap join, etc.). experimentiere allenfalls mit weiteren optimizer hints, um dahinterzukommen. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 13. Juni 2006 Teilen Geschrieben 13. Juni 2006 Aber die entscheidende Frage ist: Warum sortiert er mir die Ausgabe aufsteigend wenn er einen Full Indexscan macht und warum bekomm ich sie unsortiert beim FULL Table Scan... ein index ist bereits sortiert, daher ist die reihenfolge, in der die einzelnen zeilen zurückgegeben werden, vorgegeben und zwar in exakt der gleichen reihenfolge in der der index aufgebaut ist, weil der zugriffspfad indexentry->rowid ist. bei einem tablescan wird die tabelle von ersten block bis zur HWM gelesen. bei heap-tables können die rows vollkommen ungeordnet in den blöcken liegen, die reihenfolge entspricht dann der reihenfolge der rows in den blöcken. -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.