Oracle - Indizes werden nicht genommen

Status
Nicht offen für weitere Antworten.

heidiweber

Aktives Mitglied
Hallo,

ich teste gerade die Performance einer Datenbank.

Es wurden 2 Tabellen angelegt:

Code:
  CREATE TABLE "BI"."RHKC_2007_KO_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"KENR13" NUMBER(1,0), 
	"BRNR" NUMBER(2,0),
             "BEJA" NUMBER(4,0)
   )

CREATE INDEX "BI"."RHKC_2007_IDX4" ON "BI"."RHKC_2007_KO_KLEIN" ("BEJA")
CREATE UNIQUE INDEX "BI"."PK_KLEIN_KO_ID" ON "BI"."RHKC_2007_KO_KLEIN" ("ID")


Code:
  CREATE TABLE "BI"."RHKC_2007_MC_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"BRNR" NUMBER(2,0), 
	"PSGRAL" NUMBER(1,0), 
	"PSGRSO" NUMBER(1,0)
   )
CREATE INDEX "BI"."IDX_RHKC2007MC_ID" ON "BI"."RHKC_2007_MC_KLEIN" ("ID")

Auf den ID Spalten der beiden Tabellen liegen Indizes. Ausserdem noch ein Bitmap-Index auf BEJA.

Jetzt mache ich folgende Abfrage:

Code:
delete plan_table;

explain plan
set statement_id = 'MY_STATE'
for
select * from rhkc_2007_ko_klein a, rhkc_2007_mc_klein b where beja = 2007 and a.id = b.id

select lpad(' ',2*level)||OPERATION||' '||OPTIONS||' '||OBJECT_NAME QUERY_PLAN
from PLAN_TABLE WHERE STATEMENT_ID = 'MY_STATE'
connect by prior id = PARENT_ID AND STATEMENT_ID = 'MY_STATE' 
start with id = 1;


Als Errgebnis kommt:

Code:
  PX COORDINATOR  
    PX SEND QC (RANDOM) :TQ10001
      HASH JOIN  
        PX RECEIVE  
          PX SEND BROADCAST LOCAL :TQ10000
            PX BLOCK ITERATOR 
              TABLE ACCESS FULL RHKC_2007_KO_KLEIN
        PX BLOCK ITERATOR 
          TABLE ACCESS FULL RHKC_2007_MC_KLEIN

Kann mir vielleicht bitte jemand sagen, wieso er einen FullTableScan macht und nicht auf die Indizes geht? Zumindest der Join über beide Tabellen sollte doch über die Indizes gehen?

Vielen Dank
Grüße
Heidi
 

kama

Top Contributor
Hallo,

Code:
  CREATE TABLE "BI"."RHKC_2007_KO_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"KENR13" NUMBER(1,0), 
	"BRNR" NUMBER(2,0),
             "BEJA" NUMBER(4,0)
   )
  CREATE TABLE "BI"."RHKC_2007_MC_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"BRNR" NUMBER(2,0), 
	"PSGRAL" NUMBER(1,0), 
	"PSGRSO" NUMBER(1,0)
   )
Wo sind denn hier die primary keys ? In dem sog. Join werden nur die ID-Spalten der Tabellen in Beziehung gesetzt....aber ich sehen nirgendwo ein Feld, dass auch den Fremdschlüssel z.B. der zweiten Tabelle enthält...z.B. al la: "FK_MC_KLEIN" oder so etwas...und dazu gehört dann ein foreign Key Constraint....
MfG
Karl Heinz Marbaise
 

heidiweber

Aktives Mitglied
Hallo,

habe leider nicht alles gepostet - dachte das langt:)

Code:
  CREATE TABLE "BI"."RHKC_2007_KO_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"KENR13" NUMBER(1,0), 
	"BRNR" NUMBER(2,0),
             "BEJA" NUMBER(4,0),
	 CONSTRAINT "PK_KLEIN_KO_ID" PRIMARY KEY ("ID")
              USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
              STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
              PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
             TABLESPACE "OWB_TSP"  ENABLE
   )

Code:
  CREATE TABLE "BI"."RHKC_2007_MC_KLEIN" 
   (	"ID" NUMBER(18,0) NOT NULL ENABLE, 
	"BRNR" NUMBER(2,0), 
	"PSGRAL" NUMBER(1,0), 
	"PSGRSO" NUMBER(1,0),
	 CONSTRAINT "FK_MC_ID" FOREIGN KEY ("ID")
	  REFERENCES "BI"."RHKC_2007_KO_KLEIN" ("ID") ENABLE
   )

PrimaryKey und ForeignKey sind meiner Meinung nach angelegt.
Trotzdem macht er einen FullTableScan.
Oder was fehlt da noch?
 

heidiweber

Aktives Mitglied
Guten Morgen,

hat keiner eine Erklärung für das Verhalten? Sollte Oracle die Indizes bei der Abfrage nehmen? Oder kann man den FullTableScan doch erklären?

Vielen Dank
Grüße
Heidi
 

ice-breaker

Top Contributor
Das kommt auch auf die Verteilung der Daten an, wenn Oracle denkt, das ein Fulltable-Scan effektiver ist, weil die 2007_ko_klein Spalte zu wenig Daten hat, oder wenn der Index zuviele Daten selected, so dass ein FS effektiver ist, dann wird es das auch tun.

Mehr kann ich dir da leider nicht helfen, da ich Optimierungen in MySQL mache, und nicht weiß welche Heuristiken bzw. Eigenheiten Oracle noch hat.
 

heidiweber

Aktives Mitglied
Vielen Dank euch beiden.

Habe jetzt mal testweise in einer anderen Oracle-11g-DB "Spieltabellen" und Indizes... angelegt und es geht. Er nimmt die Indizes. Ganz genau so gemacht. Nur mit erheblich weniger Daten? Da macht ein FullTableScan ja keinen Unterschied.

Vielleicht passt doch was anderes nicht? Glaube, da muss ich Oracle kontaktieren.

Schönen Abend
Grüße
Heidi
 

sayang

Aktives Mitglied
Hallo,

wie sieht denn dein Explain-Plan aus, wenn du

select * from rhkc_2007_ko_klein a, rhkc_2007_mc_klein b where "BEJA" = 2007 and a.id = b.id

verwendest (also statt beja = 2007 "BEJA" = 2007)?

Ich war eigentlich immer der Meinung, dass Spalten-Namen, die in "" gesetzt werden case-sensitive sind. Und die BEJA-Spalte wurde ja auch mit "" angelegt und auch der Index wurde mit "BEJA" angelegt. Aber im SELECT notierst du die Spalte als beja (ohne die "").

Lg
sayang
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
S Oracle DB-Connection in .jar file ändern Datenbankprogrammierung 11
D Oracle Gateway oder Relay-Server Datenbankprogrammierung 5
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
M Oracle SQL Zeitabstand in Tagen Datenbankprogrammierung 11
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
L Oracle Oracle Datumsspalte auslesen Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
L LOAD DATA INFILE mit Oracle Datenbankprogrammierung 24
D Abfrage - Spalte(Datum) ändern (Oracle) Datenbankprogrammierung 7
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
I Datenbankverbindung Oracle DB klappt nicht - getConnection returned null Datenbankprogrammierung 8
R DB2 Oracle 12 - invalid username/passwort Datenbankprogrammierung 1
AssELAss Verbindung i5 Series 7.1 / 7.2 (DB2) mit Oracle SQL Developer Datenbankprogrammierung 3
C Von Oracle zu Couchbase Datenbankprogrammierung 1
E Was sind die Vorteile von DB2 im Gegensatz zu einer Oracle-Datenbank? Datenbankprogrammierung 5
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
S Oracle Database 11g , eclipse , Tabelle erstellen Datenbankprogrammierung 2
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
Kenan89 Oracle passwortspalte Datenbankprogrammierung 2
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
S Problemme mit oracle Datenbankprogrammierung 13
H Oracle Hibernate + Oracle Datenbankprogrammierung 3
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
D Oracle SQL Ergebnis anzeigen und Applet Fehlermeldung Datenbankprogrammierung 12
1 Java - Oracle Restore Point Datenbankprogrammierung 2
X Rollback mit Savepoint funktioniert auf Oracle nicht (ORA-01086) Datenbankprogrammierung 4
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
M Kann Oracle Datenbanktreiber nicht laden Datenbankprogrammierung 5
F Performance-Tool für Oracle Datenbankprogrammierung 2
Dit_ Oracle Oracle DB | Installation Datenbankprogrammierung 3
T Datum anpassen in Oracle Datenbankprogrammierung 5
R Oracle Java -> Tomcat -> Oracle Datenbankprogrammierung 4
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
H Oracle DBUnit/JUnit auf Oracle mit verschiedenen Schemata? Datenbankprogrammierung 8
G Stored Procedure in Oracle, Txt erzeugen Datenbankprogrammierung 9
G Oracle Zeile löschen Datenbankprogrammierung 2
G Auf Oracle Schema Name zugreifen Datenbankprogrammierung 7
G INSERT DATE in Oracle-DB Datenbankprogrammierung 11
J Oracle oder SQL-Server Datenbankprogrammierung 18
A Oracle Session Parameter per JDBC? Datenbankprogrammierung 14
Z [ORACLE] Ausgabe Tabelle im GUI Datenbankprogrammierung 4
S Oracle Trigger Datenbankprogrammierung 5
cosmic Problem beim Update einer Oracle DB Datenbankprogrammierung 7
L JDBC Oracle Datenbankprogrammierung 2
N Oracle DB liefert nicht alle Datensätze Datenbankprogrammierung 3
P Probleme mit Oracle Timestamp Datenbankprogrammierung 3
A Loader-Dateien in Oracle Datenbankprogrammierung 4
G Oracle DB Link Datenbankprogrammierung 3
padde479 Connection String Oracle Datenbankprogrammierung 5
S Oracle Abfrage mit Platzhaltern Datenbankprogrammierung 3
D Oracle Datenbank exportieren Datenbankprogrammierung 3
Q admin tool für oracle datenbank - freeware Datenbankprogrammierung 7
G Blob aus Oracle-Datenbank Datenbankprogrammierung 2
J jdbc Oracle Connection refused Datenbankprogrammierung 6
S Oracle JDBC Treiber Problem Datenbankprogrammierung 4
J Bild in Oracle Datenbank - Grundkurs Datenbankprogrammierung 7
M Verbindung zu Oracle DB Datenbankprogrammierung 4
G Float Problem Java Oracle Datenbankprogrammierung 4
O Vector als Blob in Oracle Datenbank speichern Datenbankprogrammierung 3
O Oracle 11g wirft bei 90 % der installation eine Exception ? Datenbankprogrammierung 5
W ID des letzten eingefügten Werts ermitteln (Oracle) Datenbankprogrammierung 4
ARadauer Date Problem bei Oracle DB Datenbankprogrammierung 4
R oracle Anbindung geht im jar nicht Datenbankprogrammierung 8
D Insert Oracle BLOB Datenbankprogrammierung 1
O Oracle Client Software für ojdbc5! Datenbankprogrammierung 1
Y ORACLE - Autoincrement funktioniert nicht Datenbankprogrammierung 2
E Ein If und ein SELECT in Oracle? Datenbankprogrammierung 2
M Problem mit SUBSTR (Oracle) bzw. substring (Java) Datenbankprogrammierung 13
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E [SQL, Oracle] Zeile einfügen Datenbankprogrammierung 8
G Connection zu einer Oracle DB erstellen Datenbankprogrammierung 8
L Oracle: PL/SQL und Java Datenbankprogrammierung 3
K Oracle XE Connection Problem Datenbankprogrammierung 2
T INSERT-Befehl in Java für Oracle Datenbankprogrammierung 4
G Oracle-Record auslesen Datenbankprogrammierung 2
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
H Oracle - Partionierung von Tabellen Datenbankprogrammierung 4
H Oracle XE 10 mit Java Datenbankprogrammierung 4
B Oracle Driver Probleme Datenbankprogrammierung 2
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
thE_29 Speicherplatz von Oracle DB Datenbankprogrammierung 2
D Problem beim Zugriff auf eine Oracle-DB Datenbankprogrammierung 23
G Single Sign On bei Oracle Datenbankprogrammierung 3
E Jar File: NoClassDefFoundError: oracle/sql/ORAData Datenbankprogrammierung 2
H MIt oracle Verbinden (ungültiges Argument in Aufruf) Datenbankprogrammierung 4
W Wie auf Oracle zugreifen? Datenbankprogrammierung 3
R Oracle Express 10g mit JDBC Datenbankprogrammierung 3
N Wie kann ich mich mit Oracle verbinden? Datenbankprogrammierung 3
L oracle:ORA-01008: Nicht allen Variablen ist ein Wert zugeord Datenbankprogrammierung 1
G import Oracle.jdbc*; Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben