rene1976
Goto Top

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

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

Content-Key: 317609

Url: https://administrator.de/contentid/317609

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: SeaStorm
SeaStorm 13.10.2016 um 08:04:50 Uhr
Goto Top
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