Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Tabelle optimieren??? (https://www.delphipraxis.net/155245-tabelle-optimieren.html)

romber 14. Okt 2010 13:35

Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO

Tabelle optimieren???
 
Hallo!

Seit einigen Tagen beschäftige ich mich mit dem Thema Datenbanken. Aus den ganzen Übungen und Tutorials ist eine Testtabelle erstanden, die ich nun weiter optimieren möchte. In diese Tabelle habe ich über 3,5 Mio. Datensätze aus einer Access-Datei importiert, die ich während meines Praktikums bei Schwacke zu den Testzwecken erhalten habe. Bei den Daten handelt es sich um Fahrzeugdaten, wie z.B. Marke, Modell, Version, Erstzulassung, Kilometerstand, Kraftstoffart usw.

Nun führe ich verschiedene Suchanfragen mit dieser Tabelle aus und die Dauern natürlich ewig lange, weil die Tabelle eben nicht optimiert ist. Und genau hier liegt mein Problem: ich habe bisher nicht viel Ahnung von Datenbanken und weiß nicht, wo ich mit der Optimierung anfangen soll. Anderseits möchte ich meine Testtabelle so optimieren, dass die Suchanfragen genauso schnell funktionieren wie z.B. auf den Seiten von vielen Gebrauchtwagenbörsen im Internet. Ich brauche jetzt Eure Expertenratschläge und würde sehr dankbar, wenn mir jemand ein wenig seiner wertvollen Zeit spenden und ausführlich erklären würde, wie ich in meinem konkreten Fall die Tabelle optimieren kann.

Also, ich habe eine Tabelle bestehend aus 40 Spalten. Der Primärschlüssel ist auf die Spalte "insert_id" gesetzt, die automatisch hochgezählt wird. Bisher gibt es keine Indizies. Von den 40 Spalten können nur bestimmte Spalten bei den Abfragen im WHERE-Teil definiert werden, wie z.B. Marke, Modell, Erstzulassung, Kilometerstand, Kraftstoffart, Getriebeart usw. Andere Spalten, die irrelevante Informationen wie z.B. Hubraum, Anzahl der Zylinder, Schadstoffklasse, Zahl der Sitze usw. werden nie in die Suche einbezogen.

Wie optimiert man so eine Tabelle für schnelle Suche?

Sir Rufo 14. Okt 2010 13:38

AW: Tabelle optimieren???
 
Erstelle die Indizes

DeddyH 14. Okt 2010 13:39

AW: Tabelle optimieren???
 
Zitat:

Zitat von romber (Beitrag 1055775)
Bisher gibt es keine Indizies.

Da hamwas doch schon. Setz doch einmal auf jedes Feld, das als Suchkriterium dienen kann/soll, einen Index. Das sollte bereits einen deutlichen Schub bringen.

Bummi 14. Okt 2010 13:41

AW: Tabelle optimieren???
 
Der billigste Ansatz wäre Indizes auf die für Suchen relevanten Spalten zu legen.
Bei 3,5 Mio Datensätzen wäre auch zu überlegen ob Du nicht durch Normlisierung mehr Perfomance/Wartbarkeit hineinbekommst.

Sir Rufo 14. Okt 2010 13:44

AW: Tabelle optimieren???
 
Da steht wie
http://msdn.microsoft.com/de-de/libr...3(SQL.90).aspx

Da steht was man noch beachten soll
http://www.databasejournal.com/featu...ation-Tips.htm

Kleiner Tip:
Führe eine Abfrage auf der Tabelle durch wo du nur in 1 Feld suchst
Dann für dieses Feld den Index erstellen lassen und die Abfrage nochmals laufen lassen und staunen

romber 14. Okt 2010 14:02

AW: Tabelle optimieren???
 
Vielen Dank für die schnelle Reaktionen!

Über Indizies habe ich bereits einiges gelesen und erfahren, dass es in bestimmten Fällen Sinn macht, ein Index über mehrere Spalten zu setzen. Macht es auch in meinem Fall Sinn? Z.B. bei Marke und Modell oder Erszulassung-Monat und Erszulassung-Jahr? Ehrlich gesagt, würde ich gerne verstehen, wann es sinnvoll ist, eine Index auf mehrere Spalten zu setzen.

Dann habe ich auch irgendwo einen Hinweis gelesen, dass es nicht immer gut ist, viele Indexe in einer Tabelle zu haben. Z.B. wenn in die Tabelle oft geschrieben wird. Bei mir ist es nicht der Fall. Meistens wird es gelesen und nur selten inseriert. Kann ich diesen Hinweis in meinem Fall einfach ignorieren?

Zitat:

Zitat von Bummi (Beitrag 1055779)
Bei 3,5 Mio Datensätzen wäre auch zu überlegen ob Du nicht durch Normlisierung mehr Perfomance/Wartbarkeit hineinbekommst.

Wie normalisiert man eine Tabelle? Worum genau geht es bei der Normalisierung?

Sir Rufo 14. Okt 2010 14:10

AW: Tabelle optimieren???
 
Performance mit Index, Multiindex etc. Steht doch alles hier
Zitat:

Zitat von Sir Rufo (Beitrag 1055780)
Da steht was man noch beachten soll
http://www.databasejournal.com/featu...ation-Tips.htm


DeddyH 14. Okt 2010 14:16

AW: Tabelle optimieren???
 
Normalisierung (Wikipedia)

romber 14. Okt 2010 16:53

AW: Tabelle optimieren???
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055780)

Ich habe jetzt das ganze mehrmals durchgelesen und drotzdem nicht alles verstanden. So viele optionale Parameter beim setzen eines Indexes bringen mich einfach durchanander.
Kann mir jemand Schritt für Schritte erkläre, wie ich in meinem konkreten Fall vorgehen soll? Wo ein CLUSTERED INDEX kommt, wo ein Index auf merere Spalten kommt uws. So werde ich es besser verstehen. Danke!

Sir Rufo 14. Okt 2010 17:18

AW: Tabelle optimieren???
 
Du fängst gerade mit dem Thema Index an, gut.

Um bewerten zu können, welche Indizes zu genau benötigst, muss man genau wissen, welche Abfragen wann und wie oft gemacht werden. Auch der Feldtyp ist wichtig für die Index-Entscheidung (Zahlen oder Text). Es gilt hier abzuwägen zwischen einem fetten Index (alle Felder mal rein) und einem leichten (ein Feld) ... usw.

Was möchte ich sagen:

Lege für ein Feld aus der Tabelle einen Index an und überprüfe mit einer Abfrage das Zeitverhalten
Das ist dazu um ein Gefühl dafür zu bekommen.
Den Index ganz einfach ohne großes Brimborium Cluster etc. erstellen.
Und dann weiter ran tasten.

Hast du das SQL Management Studio installiert, dann einfach auf die Tabelle klicken und Create Index


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz