Frage

Können wir eine Liste mit grundlegenden Optimierungstechniken erhalten würden (alles von zu Abfrage- Modellierung, Erstellen von Indizes, Ansichten, um die Abfrageoptimierung). Es wäre schön, eine Liste dieser zu haben, eine Technik pro Antwort. Als Bastler finden würde ich dies sehr nützlich sein, danke.

Und im Interesse der nicht zu vage sein, lassen Sie uns sagen, dass wir einen maintstream DB wie MySQL oder Oracle verwenden, und dass die DB 500,000-1m oder so Aufzeichnungen über ~ 10 Tabellen, teilweise mit Fremdschlüssel contraints enthalten wird, alle mit den typischen Speicher-Engines (zB InnoDB für MySQL). Und natürlich werden die Grundlagen wie PKs definiert sowie FK contraints.

War es hilfreich?

Lösung

.

Erfahren Sie mehr über Indizes und verwenden sie richtig Im Allgemeinen * folgende Richtlinien einhalten:

  • Jede Tabelle sollte einen Clustered-Index haben
  • Felder verwendet für Filter und Sortierungen sind gute Kandidaten für die Indizierung
  • Mehr selektive Felder sind bessere Kandidaten für die Indizierung
  • Für die beste Leistung auf entscheidende Abfragen, Design „abdecken Indizes“ für diese Abfragen
  • Stellen Sie sicher, dass Ihre Indizes tatsächlich verwendet wird, und entfernen Sie diejenigen, die nicht
  • sind
  • Wenn Ihre Tabelle 15 Felder hat, und Sie machen 15 Indizes, die jeweils mit nur einem einzigen Feld, bist du es falsch zu machen:)

* Es gibt einige Ausnahmen von diesen Regeln, wenn Sie wissen, was Sie tun. Meine Erfahrung ist, Microsoft SQL Server, aber ich würde vermuten, die meisten von diesem Rat noch auf eine andere RDMS gelten würden.

Andere Tipps

IMO, bei weitem die beste Optimierung ist das Datenmodell, das Problem Domäne passen zu haben, für die sie gebaut wurde. Wenn dies nicht der Fall, ist das resultierende Symptom schwer zu schreiben oder gefaltet Abfragen, um die gewünschten Informationen zu erhalten und dass bäumt sich normalerweise auf, wenn Berichte anhand der Datenbank erstellt werden. So eine Datenbank bei der Gestaltung hilft es, in Bezug auf die Art und die Art der Informationen, eine Idee zu haben, wie Berichte, dass die Benutzer aus dem System wollen.

Wenn Datenbank-Design sprechen, überprüfen Sie die Datenbank Normalisierung, z.B. Wikipedia-Artikel:. Normalformen

Wenn Sie ein gutes Design und noch müssen Sie optimieren die Leistung, versuchen Entnormierung .

Wenn Sie spezielle Bedürfnisse haben, die durch relationales Modell abgedeckt ist nicht effizient, Blick auf anderen Modellen unter dem Begriff NoSQL .

Einige Abfrage / schema Optimierungen:

  • Seien Sie aufmerksam, wenn DISTINCT oder GROUP BY verwenden. Ich finde, dass viele neue Entwickler DISTINCT an Orten, wo es wirklich nicht benötigt wird, oder könnte effizienter umgeschrieben werden unter Verwendung einer Exists-Anweisung oder eine abgeleitete Abfrage.

  • Denken Sie an Left Joins. Allzu oft ich neue SQL-Entwickler finden das Schema anstelle ignorieren und verwenden Linke tritt, wo sie wirklich notwendig sind. Zum Beispiel:

Select
From Orders
    Left Join Customers
        On Customers.Id = Orders.CustomerId

Wenn Orders.CustomerID eine erforderliche Spalte ist, dann ist es nicht notwendig, ein LEFT JOIN zu verwenden.

  • Seien Sie ein Student der neuen Features. Derzeit unterstützt MySQL nicht Common-Tabellenausdrücke unterstützen, die bedeuten, dass einige Arten von Abfragen sind umständlich und wahrscheinlich langsamer zu schreiben, als sie wäre, wenn WAK unterstützt wurde. Jedoch sein, dass nicht wahr für immer. Halten Sie sich auf neue Syntax-Features in MySQL, die verwendet werden können, um vorhandene Abfragen effizienter zu machen.

  • Sie haben nicht überall Ersatzschlüssel zu verwenden. Es könnte Tabellen besser zu einem intelligenten Schlüssel geeignet (z US State Abkürzungen, Währungscodes usw.), die es Entwicklern ermöglichen würde, in vielen Fällen zusätzliche Verknüpfungen zu vermeiden.

  • Wenn möglich, Wege finden, die Archivierung Daten zu einem OLAP-Server oder Berichterstattung. Je kleiner können Sie die Produktionsdaten machen, desto schneller wird es laufen.

Ein Entwurf, dass prägnant Modelle Ihr Problem ist immer ein guter Anfang. das Datenmodell Übergeneralisierung kann zu Performance-Problemen führen. Zum Beispiel habe ich Berichte von Projekten gehörte das Streben nach uber-Flexibilität, die die RDBMS als stumm „Name / Wert“ Speicher zu verwenden - und die daraus resultierende Leistung war erschreckend

.

Sobald ein gutes Design an seinem Platz ist, dann die Werkzeuge vom RDBMS bereitgestellt, um es eine gute Leistung erzielen zu helfen. Einfeld PKs (kein Composites), aber Composite Geschäftsschlüssel als Index mit eindeutiger Einschränkung, Verwendung geeigneter Datentypen, z.B. mit geeigneten numerischen Typen für numerische Werte statt char oder ähnlichem. Physikalische Eigenschaften der Hardware der RDBMS auf läuft sollte auch berücksichtigt werden, da der größte Teil der Abfragezeit ist oft Disk-I / O - aber natürlich nehmen dies nicht selbstverständlich - einen Profiler verwenden, um herauszufinden, wo die Zeit gehen wird .

In Abhängigkeit von der Aktualisierung / Abfrage-Verhältnis, materialisierten Ansichten / indizierte Sichten kann bei der Verbesserung der Leistung für langsam laufende Abfrage nützlich sein. Ein Arme-Leute-Alternative ist Auslöser zu verwenden, um ein Verfahren, dass füllt die Tabelle mit einem Ergebnis eines langsam laufenden, selten geänderten Ansicht aufzurufen.

Die Abfrageoptimierung ist ein bisschen eine schwarze Kunst, da es oft Datenbank abhängig ist, aber einige Faustregeln sind hier gegeben - Optimizing SQL .

Schließlich obwohl möglicherweise außerhalb des beabsichtigten Umfang Ihrer Frage, verwenden Sie eine gute Datenzugriffsschicht in der Anwendung, und nicht der Versuchung erliegen Ihre eigene Rolle - es sicherlich getestet sind und performant verfügbar Implementierungen für alle wichtigen Sprachen. Die Verwendung von Caching auf Datenzugriffsschicht, können mittlere Ebene und Anwendungsschicht helfen Leistung deutlich verbessert werden.

Verwenden Sie weniger Abfrage , wenn möglich. Use „JOIN“, und gruppieren Sie Ihre Tabellen, so dass eine einzelne Abfrage gibt Ergebnisse.

Ein gutes Beispiel ist das Modifizierte Preorder Baum Transversal ( MPTT ) alle Baumknoten Eltern zu bekommen, bestellt, in einer einzigen Abfrage.

Nehmen Sie einen ganzheitlichen Ansatz zur Optimierung.

Betrachten wir die Auswirkungen der langsamen Festplatten, Netzwerk-Latenz, der Mangel an Speicher und Serverlast.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top