# MS SQL Server und Performance steigern bei SQL-Abfrage



## Lautsprecher (26. September 2006)

Hallo,
ich habe auf meinen Server eine Tabelle die momentan 500.000 Datensätze umfasst. 
Desöftern müssen Auswertungen für den aktuellen Tag oder den aktuellen Monat gefahren werden. 
Select ArtikelNr, etc. from.... where Datum = .....
Das dauert ja so ziemlich lange, weil er ja jeden Satz überprüfen muss. 
Kann man die Abfrage irgendwie beschleunigen? Hab da mal so was von "Index setzen"
gehört, weiß aber leider nicht mehr wie das funktioniert....

Danke schon mal

Grüße


----------



## xCondoRx (26. September 2006)

Weisst du nicht wie man den Index setzt oder wie er funktioniert?


----------



## Lautsprecher (26. September 2006)

so mehr oder weniger beides, wie gesagt, habe zwar schon irgendwann mal was davon gehört, aber ich weiß es nicht mehr.
Eine Auffrischung für einen Anfänger wie mich wär schon super....


----------



## onlinegurke (26. September 2006)

Ein Index funktioniert grob gesagt wie das Inhaltsverzeichnis eines Buchs...

Schau mal unter http://msdn2.microsoft.com/de-de/library/ms189826.aspx bei
CREATE INDEX nach, ist aber dann gleich sehr umfassend...


----------



## xCondoRx (26. September 2006)

Stell dir vor, du suchst einen Namen in einem Telefonbuch, z.b. Zlatko . Du fängst nicht auf der ersten Seite des Telefonbuches an zu schauen ob der Name dort ist, da du ja weisst, dass Namen die mit einem "Z" anfangen, ganz hinten zu finden sind. Ein Telefonbuch ist sortiert und du weisst sofort, wo du welchen Namen findest. So macht das auch MySQL. In einer Tabelle mit 5 Mio Einträgen werden also nicht alle Einträge durchsucht. So wie auch du in einem Telefonbuch nachschaust, schaut auch MySQL nach. Der Name fängt mit "Z" an, der zweite Buchstabe ist ein "L", der dritte ein "A" etc. So können alle Namen ausgeschlossen werden, die nicht mit "Z" anfangen, deren zweiter Buchstabe kein "L" ist etc. Sehr vereinfacht aber annährend verständlich hoffe ich


----------



## Lautsprecher (26. September 2006)

okay, also mit einem Index kann ich praktisch die Auswahl eingrenzen, die er durchläuft...
kann man dann einen Index auch auf ein Datum setzen oder geht das nur auf Zahlen?
Einrichten muss ich den Index doch wenn ich meine Tabelle mit Design Table aufrufe oder? 
Welche Einstellungen muss man dabei noch beachten?


----------



## onlinegurke (26. September 2006)

Naja, einrichten kann man Indices generell auf zwei Arten (wie alles andere auch):

1. direkt per Code (erfordert aber SQL-Kenntnisse)
2. im Designer

Per Designer geht in diesem Fall so:

- Rechtsklick auf die Tabelle und Eintrag "Ändern" um die Tabelle zu verändern, wenn du erst grade ne Tabelle erstellst wird das Menü automatisch angezeigt
- Icon Indizes und Schlüssel verwalten (oder über Menü/TabellenDesigner)
- Hinzufügen
- Bei Spalten die Spalten eintragen
- Speichern


----------



## xCondoRx (26. September 2006)

Worauf man einen Index setzt ist immer schwer zu sagen. Ob nun auf eine bestimmte Spalte oder mehrere zusammenhängende Spalten usw. Desweiteren muss man sich im Klaren darüber sein, dass ein Index zwar die Abfrage erheblich beschleuningen kann, allerdings auch das Einfügen neuer Datensätze erheblich verlangsamen kann. Ich bin mit meinen tabellen ziemlich sparsam was einen Index angeht. Ich setze sie wirklich nur dort, wo ich sie auch wirklich brauche..


----------

