Heim > Datenbank > MySQL-Tutorial > Einige häufige Missverständnisse über Mysq

Einige häufige Missverständnisse über Mysq

PHP中文网
Freigeben: 2017-06-20 15:37:02
Original
1287 Leute haben es durchsucht

Häufige Missverständnisse

    1. count(1) und count(primary_key) sind besser als count(*)

    Um die Anzahl der Datensätze zu zählen, verwenden viele Leute count(1) und count(primary_key) anstelle von count(*). Sie glauben, dass dies eine bessere Leistung erbringt. In einigen Szenarien kann dies zu einer schlechteren Leistung führen, da die Datenbank einige spezielle Optimierungen für den Zählvorgang count(*) vorgenommen hat.
      1. count(column) und count(*) sind gleich

      Dieses Missverständnis selbst unter vielen leitenden Ingenieuren Es ist unter Datenbankadministratoren weit verbreitet und wird von vielen Menschen als selbstverständlich angesehen. Tatsächlich sind count(column) und count(*) völlig unterschiedliche Operationen und haben völlig unterschiedliche Bedeutungen.
      Anzahl(Spalte) bedeutet, wie viele Datensätze in der Ergebnismenge deren Spaltenfeld nicht leer ist
      Anzahl(*) bedeutet, wie viele Datensätze in der gesamten Ergebnismenge vorhanden sind
        1. Die Auswahl von a, b aus … ermöglicht der Datenbank den Zugriff auf weniger Daten als die Auswahl von a, b, c aus …

        Dieses Missverständnis ist Der Hauptgrund dafür ist, dass sie nicht viel über die Speicherprinzipien der Datenbank wissen.
        Tatsächlich werden die meisten relationalen Datenbanken in Zeilen gespeichert, und Datenzugriffsvorgänge basieren auf einer E/A-Einheit fester Größe (Block oder Seite genannt ... Meistens mehrere). Zeilen werden in jeder E/A-Einheit gespeichert, und jede Zeile speichert alle Felder der Zeile (mit Ausnahme spezieller Feldtypen wie lob).
        Ob wir also ein Feld oder mehrere Felder verwenden, ist die Datenmenge, auf die die Datenbank in der Tabelle zugreifen muss, tatsächlich dieselbe.
        Natürlich gibt es Ausnahmen, das heißt, unsere Abfrage kann im Index abgeschlossen werden. Das heißt, wenn nur zwei Felder a und b abgerufen werden, ist es nicht erforderlich, die Tabelle zurückzugeben Das Feld c ist nicht im verwendeten Index. Sie müssen zur Tabelle zurückkehren, um deren Daten zu erhalten. In diesem Fall wird das E/A-Volumen zwischen den beiden sehr unterschiedlich sein.
          1. Ordnung nach muss einen Sortiervorgang erfordern

          Wir wissen, dass die Indexdaten tatsächlich geordnet sind, wenn unser If Die erforderlichen Daten befinden sich in derselben Reihenfolge wie ein Index und unsere Abfrage wird über diesen Index ausgeführt. Die Datenbank lässt den Sortiervorgang im Allgemeinen aus und gibt die Daten direkt zurück, da die Datenbank weiß, dass die Daten bereits unseren Sortieranforderungen entsprechen.
          Tatsächlich ist die Verwendung von Indizes zur Optimierung von SQL mit Sortieranforderungen eine sehr wichtige Optimierungsmethode
          Erweiterte Lektüre: Analyse der Implementierung von MySQL ORDER BY, dem grundlegenden Implementierungsprinzip von GROUP BY in MySQL und Das grundlegende Implementierungsprinzip von MySQL DISTINCT wird in diesen drei Artikeln ausführlicher analysiert, insbesondere im ersten.
            1. Wenn der Ausführungsplan eine Dateisortierung enthält , die Festplatte wird verarbeitet Dateisortierung

            Dieses Missverständnis ist nicht unsere Schuld, sondern liegt an der von MySQL-Entwicklern verwendeten Formulierung. Bei „Filesort“ handelt es sich um die Informationen, die möglicherweise in der Spalte „Extra“ angezeigt werden, wenn wir den Befehl „explain“ verwenden, um den Ausführungsplan einer SQL-Anweisung anzuzeigen.
            Tatsächlich wird immer dann, wenn eine SQL-Anweisung einen Sortiervorgang erfordert, „Filesort wird verwendet“ angezeigt, was nicht bedeutet, dass ein Dateisortiervorgang durchgeführt wird.
            Erweiterte Lektüre: Dateisortierung in der MySQL-Befehlsausgabe verstehen, eine ausführlichere Einführung habe ich hier
            • Grundprinzipien

              1. So wenige Verknüpfungen wie möglich

              Der Vorteil von MySQL ist die Einfachheit, aber das ist in einigen Aspekten tatsächlich sein Nachteil. Der MySQL-Optimierer ist hocheffizient, aber aufgrund seiner begrenzten Menge an statistischen Informationen besteht eine größere Möglichkeit von Abweichungen im Arbeitsprozess des Optimierers. Bei komplexem Multi-Table-Join liegt es einerseits an der begrenzten Optimierung, andererseits wurden bei Join nur unzureichende Anstrengungen unternommen, so dass die Leistung immer noch weit hinter der von Vorgängern in relationalen Datenbanken wie Oracle zurückbleibt. Wenn es sich jedoch um eine einfache Einzeltabellenabfrage handelt, ist diese Lücke sehr gering und in einigen Szenarien sogar besser als bei diesen Datenbankvorgängern.
                1. So wenig wie möglich sortieren

                Sortiervorgänge verbrauchen mehr CPU-Ressourcen, daher kann eine Reduzierung der Sortierung Cache-Treffer reduzieren In Szenarien mit ausreichenden E/A-Funktionen wie hoher Rate wirkt sich dies stark auf die Antwortzeit von SQL aus.
                Für MySQL gibt es viele Möglichkeiten, die Sortierung zu reduzieren, wie zum Beispiel:
                • Optimieren Sie, indem Sie den Index zum Sortieren verwenden, wie im obigen Missverständnis erwähnt

                • Reduzieren Sie die Anzahl der an der Sortierung beteiligten Datensätze

                • Sortieren Sie Daten nicht, es sei denn, dies ist erforderlich.

                • Vermeiden Sie ressourcenintensive SQL-Anweisungen mit DISTINCT, UNION, MINUS, INTERSECT, ORDER BY, um die Ausführung der SQL-Engine zu starten. Die aufwändige Sortierfunktion (SORT) erfordert einen Sortiervorgang, während andere mindestens zwei Sortiervorgänge erfordern

                Das obige ist der detaillierte Inhalt vonEinige häufige Missverständnisse über Mysq. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

                Verwandte Etiketten:
                Quelle:php.cn
                Erklärung dieser Website
                Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
                Beliebte Tutorials
                Mehr>
                Neueste Downloads
                Mehr>
                Web-Effekte
                Quellcode der Website
                Website-Materialien
                Frontend-Vorlage