![]() |
Datenbank: MS SQL 2000 • Zugriff über: ADO
Indizes aufräumen
Hallo,
ich wollte in meiner DB den Index neu erstellen, da durch Löschen teilweise große Lücken in der Reihenfolge der lfd. Nr. entstanden sind, probiert hab ich folgendes, aber zu funktionieren scheint es nicht:
Delphi-Quellcode:
adoquery1.SQL.Text:= 'DBCC dbreindex (''meineTabelle'')'; q2.ExecSQL;
|
Re: Indizes aufräumen
Das kann aber sehr gefährlich werden.
Meistens wird der Index dazu verwendet, Verweise zu bilden. So wird z.B. in einer Tabelle AUFTRAG per Index auf die Tabelle ADRESSEN zugegriffen. Im Auftrag mit Index 123 ist ein Verweis auf die Adresse 254 (Fa. Meier, Kaiserstr. 23, 12345 Hamburg). Nun wird in der Tabelle ADRESSEN der Index neu erstellt und Index 254 steht für eine andere Adresse oder zeigt ins Nirvana. Somit müsste die DB allen Verweisen folgen und alle anderen Tabellen entsprechend anpassen. Ob das Dein DB-System unterstützt? |
Re: Indizes aufräumen
ja dessen bin ich mir schon bewusst.
Aber ich brauch es nur für diese Tabelle, in der keine weitere Abhängigkeiten bestehen, das wäre also kein Problem... |
Re: Indizes aufräumen
Warum spielen für dich die Werte der Indizes eine Rolle? Der Index dient allein intern der Datenbank, um einen Datensatz eindeutig zu identifizieren. Für den Entwickler und später den Anwender spielt es absolut keine Rolle, welche Werte die Indizes haben. Und Argumente, wie "will ich nicht", "ist unschön" sollte bei einem professionellen Entwickler keine Rolle spielen.
|
Re: Indizes aufräumen
es geht nur darum, die DB zu "säubern", d.h. es sollen keine unnötigen Lücken entstehen, was mach ich wenn ich 2147483647 Einträge habe?
|
Re: Indizes aufräumen
Wann wird deine Tabelle 2 Millarden Einträge erreichen?
|
Re: Indizes aufräumen
Warum verwendest Du nicht
SQL-Code:
??
DBCC INDEXDEFRAG ({ database_name | database_id | 0 }, { table_name | table_id | 'view_name' | view_id } , { index_name | index_id })
|
Re: Indizes aufräumen
Also einmal hab ich das Problem, dass mein Index "PK__meineTabelle__1FCDBCEB" heisst und der sicher immer variiert - also ich nicht weiß, wie ich an den Namen komme, außer mit Enterprise Manager.
Und
Delphi-Quellcode:
hat nichts bewirkt, was die Spalte ID angeht, die hab ich übrigens folgendermaßen angelegt:
adoquery.SQL.Text:= 'DBCC INDEXDEFRAG(0,''meineTabelle'',''PK__meineTabelle__1FCDBCEB'')'; q2.ExecSQL;
SQL-Code:
kann man dann nicht den Namen der ID mit angeben, damit nicht sowas wie oben entsteht?
CREATE TABLE meineTabelle (OpID bigint NOT NULL IDENTITY PRIMARY KEY, ...)
Des Weiteren wird hier auch von "the only way to truly reduce logical fragmentation is to rebuild your table's indexes" gesprochen, nur nicht wie: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz