Das ist eine nette Frage, wenn auch ziemlich weit gefasst (und nicht schlechter dafür).
Wenn ich Sie verstehe, dann fragen Sie, wie Sie das Optimierungsproblem von vorne angehen können.
Die erste Frage ist: " Gibt es ein Leistungsproblem? "
Wenn es kein Problem gibt, dann bist du fertig. Dies ist oft der Fall. Nett.
Auf der anderen Seite ...
Logging erhalten Sie häufig gestellte Fragen.
Wenn Sie eine Datenzugriffsebene verwenden, ist es möglicherweise einfach, Code zum Protokollieren aller Abfragen hinzuzufügen.
Es ist auch eine gute Idee, zu protokollieren, wann die Abfrage ausgeführt wurde und wie lange jede Abfrage dauert. Dies kann Ihnen eine Vorstellung davon geben, wo die Probleme liegen.
Außerdem fragen die Benutzer welche Bits sie stören. Wenn eine langsame Antwort den Benutzer nicht verärgert, ist das egal.
(Ich mag diesen Teil der Frage vielleicht falsch verstehen)
Sie suchen nach Mustern in den Abfragen / Antwortzeiten.
Dies sind typischerweise Abfragen über große Tabellen oder Abfragen, die viele Tabellen in einer einzigen Abfrage verbinden. ... aber wenn Sie Antwortzeiten protokollieren, können Sie sich davon leiten lassen.
Sie fragen speziell nach der Optimierung von Tabellen.
Hier sind einige der Dinge, nach denen Sie suchen können:
Vielleicht möchten Sie auch meinen Beitrag dazu .
Das ist schwer zu beantworten, ohne zu wissen, von welchem System Sie sprechen.
In Oracle beispielsweise können Sie mit dem Enterprise Manager sehen, welche Abfragen die meiste Zeit in Anspruch genommen haben, können verschiedene Ausführungsprofile vergleichen und Abfragen über einen bestimmten Zeitraum hinweg analysieren, sodass Sie keinen Index hinzufügen gehen zu einer Abfrage auf Kosten von jedem anderen, den Sie ausführen.
Ihre Frage ist ein bisschen vage. Welche DB-Plattform?
Wenn wir über SQL Server sprechen:
Der Rest hängt davon ab, welche Art von Daten Sie haben und wie sie eingerichtet ist.
Im SQL-Server können Sie die Ablaufverfolgung verwenden, um herauszufinden, wie Ihre Abfrage funktioniert. Verwenden Sie Strg + k oder l
Wenn Sie zum Beispiel einen vollständigen Tabellenscan in einer Tabelle mit einer großen Anzahl von Datensätzen sehen, ist dies wahrscheinlich keine gute Abfrage.
Eine spezifischere Frage wird Ihnen definitiv bessere Antworten bringen.
Meine Erfahrung ist in der Anfangszeit hauptsächlich mit DB2 und einer kleinen Anzahl von Oracle.
Wenn Ihr DBMS gut ist, kann es Statistiken zu bestimmten Abfragen sammeln und den Plan erklären, der zum Extrahieren der Daten verwendet wurde.
Wenn Sie beispielsweise eine Tabelle (x) mit zwei Spalten (date und diskusage) haben und nur einen Index für das Datum haben, lautet die Abfrage:
%Vor%ist sehr effizient, da es den Index verwenden kann. Auf der anderen Seite die Abfrage
%Vor%wäre nicht so effizient. Im ersten Fall würde der "Erklärungs-Plan" Ihnen sagen, dass er den Index verwenden könnte. Im letzteren Fall hätte es gesagt, dass es einen Tabellenscan machen müsste, um die Zeilen zu bekommen (das sieht im Grunde jede Zeile, um zu sehen, ob sie übereinstimmt).
Wirklich intelligentes DBMS kann auch erklären, was Sie tun sollten, um die Leistung zu verbessern (fügen Sie in diesem Fall einen Index für die Diskus-Datei hinzu).
Um zu sehen, welche Abfragen ausgeführt werden, können Sie diese entweder aus dem DBMS sammeln (wenn dies zulässig ist) oder alle dazu zwingen, ihre Abfragen über gespeicherte Prozeduren auszuführen, damit der Datenbankadministrator die Abfragen steuern kann Job, halten Sie die DB effizient.
Indizes auf PKs und FKs und eine Sache, die immer PARTITIONING hilft ...
1. Mit welchen Mustern ermitteln Sie die häufigen Abfragen?
Hängt davon ab, auf welcher Ebene Sie mit der Datenbank arbeiten. Wenn Sie ein DBA sind oder Zugriff auf die Tools haben, können Sie mit db's wie Oracle Jobs ausführen und Statistiken / Berichte über einen bestimmten Zeitraum generieren. Wenn Sie als Entwickler eine Anwendung für eine Datenbank schreiben, können Sie einfach eine Leistungsprofilerstellung in Ihrer App durchführen.
2. Wie wählen Sie die Optimierungsfaktoren aus?
Ich versuche, ein allgemeines Gefühl dafür zu bekommen, wie die Tabelle verwendet wird und welche Daten sie enthält. Ich gehe mit den folgenden Fragen vor.
Wird es eine Tonne upgedatet und auf welchen Feldern werden Updates durchgeführt? Hat es Spalten mit geringer Kardinalität?
Lohnt es sich zu indexieren? (sehr kleine Tabellen können bei Zugriff durch einen Index verlangsamt werden)
Wie viel Pflege / Kopfschmerzen ist es wert, dass es schneller läuft?
Verhältnis von Updates / Einfügungen vs Abfragen?
usw.
3. Welche Arten von Änderungen können vorgenommen werden?
- Wenn Sie Oracle verwenden, halten Sie die Statistiken auf dem neuesten Stand! =)
- Normalisierung / De-Normalisierung entweder kann man die Leistung in Abhängigkeit von der Verwendung der Tabelle verbessern. Ich normalisiere fast immer und dann nur, wenn ich auf keine andere praktische Art die Abfrage schneller machen kann. Ein guter Weg zur Denormalisierung für Abfragen und wenn es Ihre Situation erlaubt, ist, die realen Tabellen normalisiert zu halten und eine denormalisierte "Tabelle" mit einer materialisierten Ansicht zu erstellen.
- Index vernünftig. Zu viele können auf vielen Ebenen schlecht sein. BitMap-Indizes sind in Oracle großartig, solange Sie die Spalte nicht häufig aktualisieren und diese Spalte eine geringe Kardinalität aufweist.
- Verwenden von indexierten Tabellen.
- Partitionierte und unterpartitionierte Tabellen und Indizes
- Verwenden Sie gespeicherte Prozeduren, um den Umlauf von Anwendungen zu reduzieren, die Sicherheit zu erhöhen und die Abfrageoptimierung zu aktivieren, ohne die Benutzer zu beeinträchtigen.
- Wenn nötig, Tabellen im Speicher pinnen (viel und ziemlich klein)
- Gerätepartitionierung zwischen Index- und Tabellen-Datenbankdateien.
..... die Liste geht weiter. =)
Ich hoffe, das ist hilfreich für Sie.
Tags und Links sql database-design