Wie kann ich beim MS-SQL Server 2012 einen Clustered Index nachträglich auf der life DB hinzufügen
Hallo,
ich habe festgestellt, dass nicht alle Tabellen in unserer MS SQL Server 2012 DB einen clustered Index (gruppierten Index) haben.
Das betrifft vor allen noch alte Tabellen vermutlich von MS-SQL 7.0.
Die Theorie sagt das jede Tabelle einen clustered Index haben sollte.
https://www.mssqltips.com/sqlservertip/1254/clustered-tables-vs-heap-tab ...
https://www.mssqltips.com/sqlservertip/2510/sql-server-tables-without-a- ...
MS SQL Server 2012 legt anscheinend bei jeder neu erstellten Tabelle automatisch eine gruppierten Index auf den Primary Key an.
Das war anscheinend früher nicht der Fall.
Hiermit findet man alle Tabllen ohne gruppierten Index
Wie kann man nun (allen) Tabellen mit Primary Key einen clustered index geben?
Macht das Sinn ein update als Batch über alle Tabellen durchlaufen zu lassen und aus dem Primary Key einen gruppierten Primary Key zu machen?
Hat das schon jemand gemacht und wie geht der Code dafür?
Danke.
Rene
ich habe festgestellt, dass nicht alle Tabellen in unserer MS SQL Server 2012 DB einen clustered Index (gruppierten Index) haben.
Das betrifft vor allen noch alte Tabellen vermutlich von MS-SQL 7.0.
Die Theorie sagt das jede Tabelle einen clustered Index haben sollte.
https://www.mssqltips.com/sqlservertip/1254/clustered-tables-vs-heap-tab ...
https://www.mssqltips.com/sqlservertip/2510/sql-server-tables-without-a- ...
MS SQL Server 2012 legt anscheinend bei jeder neu erstellten Tabelle automatisch eine gruppierten Index auf den Primary Key an.
Das war anscheinend früher nicht der Fall.
Hiermit findet man alle Tabllen ohne gruppierten Index
SELECT TOP 1000 o.name, i.type_desc, o.type_desc, o.create_date
FROM sys.indexes i
INNER JOIN sys.objects o
ON i.object_id = o.object_id
WHERE o.type_desc = 'USER_TABLE'
AND i.type_desc = 'HEAP'
ORDER BY o.name
Wie kann man nun (allen) Tabellen mit Primary Key einen clustered index geben?
Macht das Sinn ein update als Batch über alle Tabellen durchlaufen zu lassen und aus dem Primary Key einen gruppierten Primary Key zu machen?
Hat das schon jemand gemacht und wie geht der Code dafür?
Danke.
Rene
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 317609
Url: https://administrator.de/forum/wie-kann-ich-beim-ms-sql-server-2012-einen-clustered-index-nachtraeglich-auf-der-life-db-hinzufuegen-317609.html
Ausgedruckt am: 13.05.2025 um 16:05 Uhr
1 Kommentar
Hi
das solltest du so pauschal auf keinen Fall machen.
Ein Clustered Index erstellt man auf Tabellen, die viel gelesen werden, aber nicht so oft neue Zeilen bekommen, bzw, wenn die neue Zeile physikalisch unterhalb der letzten Zeile geschrieben wird. Grund ist, das der Clustered Index die Daten anhand des Indexes physikalisch auf der Platte ablegt. Schreibst du einen neuen Datensatz, der bei der sortierung irgendwo innerhalb (und nicht ans Ende) geschrieben wird, dann wird alles unterhalb dieses neuen Eintrages weggeschoben, der neue Datensatz angefügt und der Rest darunter gehängt. Das sind viele IOs auf der Platte.
Welche Tabelle also welchen Index bekommt und vor allem auf welchen Spalten, sollte man individuell entscheiden.
Da ist es schon Sinnvoller, den Database Performance Analyzer zu nehmen und den mal auf den Plancache gucken zu lassen. Als Hilfe. Nicht einfach alles übernehmen
das solltest du so pauschal auf keinen Fall machen.
Ein Clustered Index erstellt man auf Tabellen, die viel gelesen werden, aber nicht so oft neue Zeilen bekommen, bzw, wenn die neue Zeile physikalisch unterhalb der letzten Zeile geschrieben wird. Grund ist, das der Clustered Index die Daten anhand des Indexes physikalisch auf der Platte ablegt. Schreibst du einen neuen Datensatz, der bei der sortierung irgendwo innerhalb (und nicht ans Ende) geschrieben wird, dann wird alles unterhalb dieses neuen Eintrages weggeschoben, der neue Datensatz angefügt und der Rest darunter gehängt. Das sind viele IOs auf der Platte.
Welche Tabelle also welchen Index bekommt und vor allem auf welchen Spalten, sollte man individuell entscheiden.
Da ist es schon Sinnvoller, den Database Performance Analyzer zu nehmen und den mal auf den Plancache gucken zu lassen. Als Hilfe. Nicht einfach alles übernehmen