Datenbankaufbau, Geschwindigkeit und Pflege
Fossi
- datenbank
0 Tom0 Michael Schröpl
Bin gerade im Aufbau einer Datenbank(Access 97).Jetz habe ich eine Tabelle in der ca.20 Felder in denen Id-Werte gespeichert sind. Diese werte sind über eine 1-n Verbindung mit den verschiedenen Detail-Tabellen verbunden. Das habe ich gemacht weil diese Id's optionen in einem SuchFormular darstellen und es höchstens 100 pro Tabelle gibt.Deswegen sind die ID-Werte als Byte angelegt um Speicher zu sparen. Danach habe ich eine Abfrage in der DB angelegt die alle diese Tabellen zusammenführt damit die SQL-Anweisungen des Suchformulars nicht so kompliziert werden.
Und auf diese Abfrage wende ich jetz meine Abfragen aus dem Formular an.
Jetz meine Fragen:
1. Auf Welche Werte der Tabellen soll ich Indexe anwenden ?
2. Bringt die Abfrage in der DB Geschwindigkeitsnachteile ?
3. Wie ist es mit der Pflege der Datenbanken im laufenden Betrieb
z.B. Komprimieren etc..
4.Ich habe irgendwo gelesen daß auf eine normale DB nur 64 gleichzeitige Zugriffe stattfinden können, und bei mehr sollte man sie in eine SQL-Server DB konvertieren.
Jetzt möchte ich wissen ob das stimmt und wenn ja wie man eine normale DB in eine SQL Server konvertiert.
So das war jetz sehr viel auf einmal aber ich hoffe ihr habt Lust und Zeit und natürlich "WISSEN" das mir weiterhelfen könnte.
Natürlich bin ich auch an weiteren Ideen zur Geschwindigkeitsoptimierung interressiert.
Schon mal danke im voraus.
Hallo Fossi
Ich kann mir Deine konkrete Aufgabenstellung gerade nicht so gut vorstellen, darum antworte ich mal allgemein.
Jetz meine Fragen:
- Auf Welche Werte der Tabellen soll ich Indexe anwenden ?
Indexe werden immer auf die Felder gelegt, wo Suchzugriffe erfolgen müssen, bzw. bei Primary- und Foreign-Keys.
- Bringt die Abfrage in der DB Geschwindigkeitsnachteile ?
Eine Abfrage braucht immer Zeit. Nur keine Abrage ist schneller.
Wenn die Abfrage grosse Datenmengen abfragt und nur ein kleines Resultat zurückliefert, ist es sicher zur Entlastung des Netzwerkes sinnvoll, diese Abfrage auf der (Server-)DB auszuführen.
Dafür wird aber die Rechnerlast auf dem Server bei Multi-User-Zugriff stark ansteigen, wo sonst die Rechnerlast auf die Clients verteilt wird.
- Wie ist es mit der Pflege der Datenbanken im laufenden Betrieb
z.B. Komprimieren etc..
Ist im Allgemeinen nicht zu empfehlen. Solche Tätigkeiten sollten nur dann ausgeführt werden, wenn keine Benutzer mehr auf die DB zugreifen.
4.Ich habe irgendwo gelesen daß auf eine normale DB nur 64 gleichzeitige Zugriffe stattfinden können, und bei mehr sollte man sie in eine SQL-Server DB konvertieren.
Jetzt möchte ich wissen ob das stimmt und wenn ja wie man eine normale DB in eine SQL Server konvertiert.
Bei so vielen Zugriffen dürfte Acces rein von seiner Leistungsfähigkeit nicht mehr die richtige Wahl sein.
Grüsse
Tom
- Auf welche Werte der Tabellen soll ich Indexe anwenden ?
Ein Index bringt dann etwas, wenn die Projektivität der Werte hoch ist - also wenn Du relativ viele verschiedene Werte hast und durch eine Suche eines Wertes über den Indexbaum (was ja einiges an Verwaltungsarbeit kostet) etwas gewinnst gegenüber dem linearen Abarbeiten aller Zeilen der Tabelle.
Indexe über Felder mit eindeutigen Werten (IDs etc.) sind natürlich ideal. Nach Oracle-Handbuch kostet Indexzugriff gegenüber full table scan irgendwas zwischen Faktor 5 und 10 - also: Wenn Du signifikikant mehr als 10 verschiedene Werte in der Tabelle hast (und diese nicht zu extrem ungleich verteilt sind), dann wird ein Index die Suche wahrscheinlich beschleunigen. (Das kannst Du natürlich auch einfach ausprobieren: Zeitmessung, Index anlegen, noch eine Zeitmessung.)
Bedenke auch, daß das Warten eines zusätzlichen Indexes alle Schreibzugriffe langsamer macht - also nur Indexe anlegen, die auch wirklich in Queries genutzt werden. (Speicherplatz kostet der Index ja auch noch.)
- Bringt die Abfrage in der DB Geschwindigkeitsnachteile ?
Das habe ich so nicht verstanden.
- Wie ist es mit der Pflege der Datenbanken im laufenden Betrieb
z.B. Komprimieren etc..
Um dazu etwas zu sagen, müßte ich mehr über Dein Betriebsmodell wissen (housekeeping-Zeiten etc.).
4.Ich habe irgendwo gelesen daß auf eine normale DB nur 64 gleichzeitige Zugriffe stattfinden können, und bei mehr sollte man sie in eine SQL-Server DB konvertieren.
Jetzt möchte ich wissen ob das stimmt und wenn ja wie man eine normale DB in eine SQL Server konvertiert.
Hm, die Meinungen darüber, was eine "normale" Datenbank ist, scheinen voneinander abzuweichen. ;-)