MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 20.08.2019, 06:50   #1
Yuppilarve
Neuer Benutzer
Neuer Benutzer
Standard T-SQL : MSSQL 2008 - "Kosten" eines SELECT mit und ohne Index

Guten Morgen,

im "Handbuch zum SQL Server Indexentwurf" steht, man solle mit Indizes experiementieren..... Also habe ich das auch getan.

Weiter unten im Text kommt diese Passage
"...Das Indizieren kleiner Tabellen ist häufig nicht die optimale Methode, da der Abfrageoptimierer in diesem Fall mitunter mehr Zeit benötigt, um die Daten über einen Index zu suchen, als für die Durchführung eines einfachen Tabellenscans erforderlich wäre. Aus diesem Grund werden Indizes für kleine Tabellen möglicherweise niemals verwendet, müssen jedoch trotzdem verwaltet werden, wenn sich Daten in der Tabelle ändern"


Ich habe nun eine SELECT Abfrage über eine Tabelle unseres Dokumentenmanagementsystems laufen lassen. In der Tabelle sind 5 Spalten mit 11 Einträgen. Die 11 Einträge ändern sich nie, es sind die möglichen Status unserer Artikel und Dokumente.

Die SELECT Abfrage wurde einmal mit Index gemacht. Danach habe ich den Index gelöscht und erneut abgefragt.
Im SQL Management Studio habe ich für beide Fälle den Ausführungsplan aktiviert und die "Kosten" ermittelt (siehe Anhang).

Wenn ich es richtig sehe, dann sind zwar die CPU Kosten runter gegangen, dafür haben sich die E/A Kosten um den Faktor 10 erhöht. Die Operator- und Strukturkosten sind gleich geblieben.

Was erkenne ich nun aus diesen Werten?
Die Tabelle ist nach meinem Erachten als klein anzusehen. Ich verstehe nicht so ganz die Beschreibung aus dem Microsoft Handbuch.
Wer kann mir hierzu etwas Infos geben?

Beste Grüße....
Adrian "Yuppilarve"
Angehängte Grafiken
Dateityp: jpg Scan-Index-Table_klein.jpg (95,6 KB, 10x aufgerufen)
Yuppilarve ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.09.2019, 20:26   #2
Joachim Hofmann
MOF Koryphäe
MOF Koryphäe
Standard

Kurz gesagt:
Scan heisst "alles stumpf von vorn bis hinten durchsuchen". Einmal wird es bei dir mit dem Index getan, ein anderes mal mit der Tabelle. Wenn der Index "richtig" benutzt werden würde, würde ein Index *Seek*, kein Scan ausgeführt. Anders gesagt, der Index wird nicht benutzt, so wie es im Lehrbuch steht.

__________________

<table width="42%" border="0" cellspacing="0" cellpadding="0"> <tr> <td > Gruß </td> <td > <a *****"http://www.vim.org"><img src="http://www.ms-office-forum.net/daten/sql/vim_edited_blue.jpg" alt="edited with vim" border=0></a> </td> </tr> <tr> <td > Joachim </td> <td> </td> </tr> </table>
Joachim Hofmann ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2019, 08:20   #3
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von Yuppilarve Beitrag anzeigen

Wenn ich es richtig sehe, dann sind zwar die CPU Kosten runter gegangen, dafür haben sich die E/A Kosten um den Faktor 10 erhöht. Die Operator- und Strukturkosten sind gleich geblieben.

Was erkenne ich nun aus diesen Werten?

Schau nochmal genau. Eine Änderung von 0,0031 auf 0,0032 ist keine Änderung um den Faktor 10!

Im Großen und Ganzen erkennst du aus den Werten, dass es kaum einen Unterschied macht, ob der Clustered Index existiert oder nicht. - Ein Clustered Index ist übrigens ein Sonderfall und IMO nicht so recht von deinem Zitat aus dem "Handbuch zum Indexentwurf" (woher kommt das?) zur Indexierung abgedeckt. Ein Clustered Index definiert die physische Speicherung der Datensätze. Wenn du ihn löscht, wird die Tabelle zu einer Heap-Tabelle.

__________________

Office / Access 2019: Rückkehr der Symbolleiste?
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.09.2019, 10:55   #4
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

eine SELECT Abfrage

... ist konkret was genau?

Im SELECT-Teil hat ein Index praktisch gar keine Wirkung.
Ein Index macht Sinn beim Filtern, Verknüpfen, Gruppieren, Sortieren, also dort, wo Vergleichsoperationen anfallen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Besucher: 2)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.