[oracle] index

Split1989

hh-student.de
ID: 238425
L
9 April 2007
1.223
85
Hi Leute,
habe ein Kleines Problem bei der Abgabe einer Aufgabe für mein DB Praktikum.


Aufgabe 6 (Physischer Datenbankentwurf)
a) Informieren Sie sich in der Oracle Online-Hilfe über das Konzept des „Index“. Lesen Sie die
Dokumentation zu dem Kommando „Create Index“.
b) Überlegen Sie, welche Indexe in dem Schema von Aufgabe 5 sinnvoll sind. Dokumentieren Sie Ihre
Entscheidung.
c) Erzeugen Sie die Indexe, die Sie vorher als sinnvoll eingeschätzt haben.
Abzugeben ist die Dokumentation von b). Das SQL-Skript für c) ist als Datei in Oracle auszuführen (und
aufzubewahren!).

Teil der aufgabe 5:

CREATE TABLE kunde (
kdnr number(10) PRIMARY KEY,
name varchar(20) NOT NULL,
vorname varchar(20) NOT NULL,
strasse varchar(50) NOT NULL,
plz varchar(5) NOT NULL,
ort varchar(20) NOT NULL,
ktonr number(10) NOT NULL,
blz varchar(8) NOT NULL,
hits number(20)
);

Zu aufgabe 6:
Wir verwenden den normalen Index und setzen ihn an folgende spalten:
kunde → kdnr
bestellung → beid
bestellung → kdnr
posten → beid
produkt → prid

beanstandung vom Prof.:
- Index: Haben sie den Index auf "kunde → kdnr" mal ausprobiert? Geht nicht? Aha. Warum nicht? Lesen! Neue Version hochladen!

Verstehe nur leider gerade nicht was dadran falsch ist. Evtl kann mir jmd von euch weiterhelfen?
 
Der Prof bezieht sich sicher auf das was von Oracle vorgegeben ist.

https://docs.oracle.com/cd/B19306_01/server.102/b14231/indexes.htm#i1006278 ...
...
Order Index Columns for Performance

The order of columns in the CREATE INDEX statement can affect query performance. In general, specify the most frequently used columns first.

If you create a single index across columns to speed up queries that access, for example, col1, col2, and col3; then queries that access just col1, or that access just col1 and col2, are also speeded up. But a query that accessed just col2, just col3, or just col2 and col3 does not use the index.
...

ein PRIMARY KEY ist "(ein)eindeutig" für eine Abbildung, dafür braucht man keine Optimierung, weil der Index hier !eindeutig! ist!!!
Ein Index bildet man über Spalten, die einer bestimmten Normalform unterliegen.

Also nochmal Kdnr ist falsch

Nachtrag:
Deine Tabelle ist eh in keiner Normalform, da würde auch ein Index nicht viel bringen...
 
Zuletzt bearbeitet:
Tobomator deine Antwort ist Mist: Der Prof sagt dass auf der Spalte ein Index nicht angelegt werden kann, nicht dass er sinnlos ist.

Gründe warum das so ist können wir dir mit den wenigen Infos nicht sagen. Was passiert denn wenn du den Index anlegen willst?
 
sql developer sagt "table KUNDE erstellt."

wenn ich CREATE UNIQUE INDEX Kunden_Nr ON Kunde (kdnr)
anwende sagt er:


Fehler beim Start in Zeile 1 in Befehl:
CREATE UNIQUE INDEX Kunden_Nr ON Kunde (kdnr)
Fehler bei Befehlszeile:1 Spalte:40
Fehlerbericht:
SQL-Fehler: ORA-01408: Diese Spaltenliste hat bereits einen Index
01408. 00000 - "such column list already indexed"
*Cause:
*Action:
 
Zuletzt bearbeitet:
Code:
CREATE TABLE kunde (
kdnr number(10) PRIMARY KEY,
...
);

Fehler beim Start in Zeile 1 in Befehl:
CREATE UNIQUE INDEX Kunden_Nr ON Kunde (kdnr)
Fehler bei Befehlszeile:1 Spalte:40
Fehlerbericht:
SQL-Fehler: ORA-01408: Diese Spaltenliste hat bereits einen Index
....


Und zwar den PRIMARY KEY.
 
Primary Key bedeuetet soviel wie "ein Menge von Indizes" für diese Spalte, wo jeder Index (Teilmenge) eineindeutig ist. Was einen Index hat, kann mit keinem zweiten belegt werden!

https://de.wikipedia.org/wiki/Schlüssel_(Datenbank)

lies und versuch mal zu verstehen was da so steht...

Bsp.: Die Menge der natürlichen Zahlen [1..100] ( 1 bis 100 ).
Das würde heissenn, Primary Key auf die Menge bedeutet: 100 Indizes (eineineutig)
da jede Zahl nur einmal in der Menge enthalten ist.
 
ok und wie beseitigt man nun das problem?
den altern primary key löschen?

oder keinen unique index benutzen?
 
Ein Primary Key besteht nicht aus einer Menge von Indizes sondern ist ein Indize. Ein Schlüssel und ein Indize sind das gleiche.

Und da ein Primary Key automatisch die Bedeutung eines normalen Schlüssels und eines einzigartigen Schlüssels hat, verbietet eben Oracle das Setzen eines weiteren absolut nutzlosen Schlüssels. Du solltest dir die Bedeutungen jedes Schlüssels klarmachen. Also was macht ein normaler Schlüssel, was ein einzigartiger Schlüssel und was ein Primärschlüssel. Die Reihenfolge ist extra so gewählt, denn jeder der Schlüssel fügt noch einige Bedingungen dazu.
 
Zuletzt bearbeitet:
denk doch mal logisch.
wieviele Paare an schlüsseln lassen sich bilden, wo es in der jetzigen tabelle viele doppeleinträge geben könnte ?

(Name, Ort) dieses paar ist wohl das geeignetste dafür
Bsp: viele Müller,Meier kann es in einem Ort geben
Frage: was Hilft ein Index ? die doppelten werden schneller gefunden, wenn man den Index auf eine/mehr als eine Spalte ausdehnt, der eine bessere Unterteilung für das obige Paar bringt.
Bsp: (Vorname)
-> index über (Name,Ort,Vorname)

ein Index legt intern einen puffer an der beim select mit zum tragen kommt

PS : finde heraus wo derunterschied zwischen dem Index oben und dem hier ist: (Name,Vorname,Ort)
lies dazu nochmal create index beim linkvon mir oben dazu durch