SQL Skript zur Ermittlung von empfehlenswerten Indexen

topfact AG intern>Organisation>Richtlinien - verbindliche Anweisungen>Urlaub - Organisationsrichtlinie>technische Dokumentation Überblick>Standard Tools und Skripts>SQL Skript zur Ermittlung von empfehlenswerten Indexen
Produkt: topfact6 MyWork
Erstellt am 24.09.2020 11:56, letzte Aktualisierung am 05.06.2026 11:02.
IndexprozessorauslastungLastMSSQLDocuWare

Detlev Eberhardt 24.09.20


Über das nachfolgende Skript wird im MSSQL Server die Tabelle sys.dm_db_missing_index_groups mig abgefragt und fertige Indexe als Vorschlag vorbereitet.

Trotzdem unbedingt prüfen ob der Index sinnvoll ist. Ein Indikator dafür sind u.a. die Anzahl der user_seeks Falls und ob dieser fehlende Index eine tatsächlich Auswirkung hätte.

Falls ja, den Wert aus der Spalte create_index_statement rauskopieren und zur Anwendung bringen. Beispiel:

CREATE INDEX [idx_PROJEKTAKTE_FIRMENORDNER_KULIENR] ON [dwdata].[dbo].[PROJEKTAKTE_FIRMENORDNER] ([KULIENR]) INCLUDE ([DWDOCID], [DWDISK], [DWNAME], [DWSYSTEMFLAGS], [DWFORMAT], [DWSECTIONCOUNT], [DWTOTALPAGES], [DWEXTENSION], [DWDOCSIZE], [DWSTOREUSER], [DWSTOREDATETIME], [DWMODUSER], [DWMODDATETIME], [DWLASTACCESSUSER], [DWLASTACCESSDATETIME], [DWLOCKUSERID], [DWCHECKOUTINFO], [DWDOCGUID], [DWSTORAGESETTINGS], [DWVERSIONSTATE], [DWMAJORVERSION], [DWMINORVERSION], [DWVERSIONCOMMENT], [DWDOCUMENTTAG], [DWFIELDSTAG], [DWSECTIONSTAG], [DWCONTENTTAG], [DWANNOTATIONSTAG], [KU__LIEF_NAME], [BELEGART], [BELEGNUMMER], [BETREFF_KURZBESCHREIBUNG], [VERSANDART], [BARCODE], [TECHN_STATUS], [BELEGDATUM], [KOMMISSION], [POSTDATUM], [BETRAG], [VERANTWORTLICHER], [KFM__STATUS1], [KFM__STATUS2], [KFM__STATUS3], [KFM__STATUS4], [BELEGTYP], [DWMASTERDOCID], [BELEGNUMMER_NUM], [VORGANG_NUM], [EMAIL_ABSENDER], [EMAI_EMPFAENGER], [EMAIL_CC], [EMAIL_ANLAGEN], [ABGELEGT_VON_TF], [QRCODE], [AUFTRAGSNUMMERLANG], [BELEGSNUMMERLANG], [KONTROLLE])

Bei mehren Indexvorschlägen des Systems ist ggf. der Indexname anzupassen, weil Indexe mit gleichen Namen nicht angewandt werden können

SKRIPT:

SELECT

  migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,

  'CREATE INDEX [idx_' -- + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)

 

  + LEFT (PARSENAME(mid.statement, 1), 32) + '_'

 

   +

  Left(

 Replace(

 Replace(

Replace( ISNULL (mid.equality_columns,'')

+ CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN '_' ELSE '' END

+ ISNULL (mid.inequality_columns, ''),

'], [', '-' ),

 ']',''),

 '[',''),

 128)

 + ']'

  + ' ON ' + mid.statement

  + ' (' + ISNULL (mid.equality_columns,'')

    + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END

    + ISNULL (mid.inequality_columns, '')

  + ')'

  + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,

  migs.*, mid.database_id, mid.[object_id]

FROM sys.dm_db_missing_index_groups mig

INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle

INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle

WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10

 

and last_user_seek >= '2014-10-02'

 

ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC


Ähnliche Seiten zum Produkt
MyWork QuickIndex vom 11.07.2026
MyWork Ergebnisliste vom 11.07.2026
Positionsprüfung vom 11.07.2026
Detailbereich anzeigen vom 11.07.2026
Dokument sperren vom 11.07.2026
Kommentar vom 11.07.2026
Im QuickIndex öffnen vom 11.07.2026
Bildintegration vom 11.07.2026
Stempelfunktionen vom 11.07.2026
Inhaltsverzeichnis