[prev in list] [next in list] [prev in thread] [next in thread] 

List:       suse-adabas
Subject:    Re: [suse-adabas] Indizes auf PK Spalten
From:       Joerg Bruehe <joerg () sql ! de>
Date:       2002-03-08 18:07:15
[Download RAW message or body]

Hallo!

Detlef Kraska wrote:
> 
> Hallo,
> 
> > Adabas läßt das Anlegen von Indizes auf Primary Key Spalten zu.
> > Liegt standardmäßig kein Index auf einer PK Spalte? Was passiert, wenn ich
> > einen von mir angelegten Index auf eine PK Spalte lösche? Gibt es dann noch
> > einen bzw. legt Adabas dann einen für die PK Spalten an?

Adabas D speichert die Datensaetze in Baeumen, die nach dem Primaer- 
Schluessel (PK) der Tabelle strukturiert sind, und der kann eine oder 
mehrere Spalten umfassen. Jeder direkte Zugriff erfolgt ueber den 
Schluessel, ansonsten geht nur ein Scan der Tabelle.

Ein Index ist (auf der Platte) ein Baum, der nach dem
Sekundaerschluessel 
(SK) strukturiert ist und fuer jeden darin auftretenden Wert eine Liste 
(eines oder mehrere Eintraege) des/der zugehoerigen PK hat.

Bei einem einspaltigen PK waere ein Index darueber also eine einfache 
Liste von Paaren gleicher Werte, das ist voellig sinnlos. Genauso
sinnlos 
waere ein Index ueber den kompletten PK (oder dessen erste Spalte/n).

Weil Oracle die Daten voellig anders ablegt, wurde aber mal eingebaut, 
dass im Oracle-Modus fuer jede Tabelle in der Schema-_Anzeige_ 
ein Index ueber den PK gemeldet wird.

> 
> ein Primary Key wird ähnlich wie ein Index verwaltet, ist aber keiner. Deswegen
> läßt sich da auch noch ein Index drauflegen, das hat aber meiner Beobachtung
> nach keine Performance-Vorteile (außer natürlich der Key ist Teil eines

Ist immer eine Frage der Struktur und der Benutzung: 
Bei einem mehrfeldrigen PK gibt es ja eine klare Hierarchie, in der 
die Werte stehen, und jeder Zugriff setzt die Kenntnis des PK-Anfangs 
(meist-signifikante Spalte) voraus. 
Wenn haeufig Zugriffe vorkommen, in denen nur "hintere" Spalten des 
PK bekannt sind, dann kann ein Index ueber diese Spalten durchaus 
beschleunigen, weil er den Scan vermeidet.

> zusammengesetzten Indizes). Das Löschen eines Indexes auf einem Key hat meines
> Wissens also auch keine Folgen.

Richtig, der Index ist ja ein eigener Baum "neben" der Tabelle. 
Das gilt fuer jeden Index (abgesehen von einem UNIQUE-Constraint, 
der ja nur ueber den Index erzwungen wird). 

Gruss, 
Joerg Bruehe

-- 
Joerg Bruehe, SQL Datenbanksysteme GmbH, Berlin, Germany
     (speaking only for himself)
mailto: joerg@sql.de

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic