AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle optimieren???

Ein Thema von romber · begonnen am 14. Okt 2010 · letzter Beitrag vom 25. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 13:44
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Okt 2010 um 13:47 Uhr)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 14:02
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?

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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 14:10
Performance mit Index, Multiindex etc. Steht doch alles hier
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 14:16
Normalisierung (Wikipedia)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 16:53
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!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 17:18
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Tabelle optimieren???

  Alt 14. Okt 2010, 17:54
Ok, vielen Dank!
Einige Indizies habe ich bereits gesetzt und sie wirken wirklich wunder. Ich probiere noch weiter und melde mich bestimmt noch mit weiteren Fragen!
Danke!
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.167 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Tabelle optimieren???

  Alt 18. Okt 2010, 11:55
Habe noch einige Anfänger-Fragen zu den Indizien.

Ich habe die Indizies gesetzt und die Abfragen laufen nun viel schneller. Trodzdem wenn ich nach langer Pause eine Anfrage ausführe, dauert es wieder sehr lange. Die weitere Anfragen gehen dann ganz schnell. Warum ist das so und was muss ich unternehmen, damit das nicht passiert?

Spielen die Anzahl der Spalten und die Detentypen eine Rolle bei der Geschwindigkeit einer Abfrage? Ich meine, ich habe in meiner Tabelle (nicht normalisiert) 40 Spalten, zwei davon sind vom Typ ntext. Bei meinen Abfragen werden aber höchstens 15 Spalten einbezogen, die alle vom Typ Int, SmallInt oder Tinyint sind. Und ich selectiere nie alle Felder, sondern wähle nur die Felder, die ich wirklich brauche. Soll ich die Tabelle schmaller machen, um bessere Performance zu erreichen?

Bei der Erstellung der Tabelle habe ich für manche Felder den Typ SmallInt gewählt, wobei wir ich es mir jetzt überlege auch ein TinyInt gereicht hätte. Nun habe ich auf diese Spalten Indizies gesetzt. Spielt es für Performace eine Rolle? Werden die Abfragen schneller, wenn in den Datentyp auf TinyInt ändere?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Tabelle optimieren???

  Alt 18. Okt 2010, 12:55
Ich vermute mal, du hast die MSSQL Express Edition, die ja meist auf Desktop-Rechner eingesetzt wird. Da wird nach einiger Zeit der Index-Cache geleert, sonst könntest du irgendwann der Rechner nicht mehr gebrauchen.
Entzieht sich jetzt aber meiner Kenntnis ob man dieses Verhalten in der EE beeinflussen kann.

Der echte MSSQL macht das imho nicht (nur wenn der RAM-Speicher nicht ausreicht). Darum sollte ein SQL-Server auch mit mind. soviel RAM ausgerüstet sein, dass alle Indizes im RAM Platz haben. Beim Start kann man auch beobachten, dass der SQL-Server die gesamte RAM-Kapazität (die er nehmen darf) an sich reißt.

Je kleiner die Daten im Index umso weniger Daten müsse ja von der Platte gelesen werden, somit ist es schon ein Unterschied, ob man eine Spalt mit 1 Byte / 4 Byte oder x Byte hat.
Messbar wird das natürlich erst ab einer bestimmten Anzahl an Datensätzen (könnte bei dir also schon relevant sein)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#10

AW: Tabelle optimieren???

  Alt 18. Okt 2010, 13:03
Zu den ntext-Feldern: ich weiß nicht, ob es sich bei MS SQL auch so verhält, aber in anderen DBMS (AFAIK Firebird z.B.) haben diese auch Einfluss auf die Performance. Hier wirkt es Wunder, diese in eine eigene Tabelle auszulagern und eine 1:1-Relation einzurichten. Vor einiger Zeit gab es mal einen Thread dazu (IIRC von alzaimar), Du kannst ja einmal danach suchen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz