2 Stimmen

Leistungsverbesserungen für Tabellen

Bei MySQL übersehe ich oft einige Optionen wie "signed/unsigned" ints und "allow null", aber ich frage mich, ob diese Details eine Webanwendung verlangsamen könnten.

Gibt es in diesen Situationen nennenswerte Leistungsunterschiede?

  1. unter Verwendung eines Integer-Primärschlüssels für einen niedrigen/hohen Bereich
    • 5000 Zeilen mit IDs von 1 bis 5000
    • 5000 Zeilen mit IDs von 20001 bis 25000
  2. Ganzzahlige PK, die gleichmäßig oder ungleichmäßig inkrementiert.
    • 5000 Zeilen mit IDs von 1 bis 5000
    • 5000 Zeilen mit IDs von 1 bis 30000 verstreut
  3. Einstellen einer Integer-PK als unsigned vs. signed
    • Beispiel: wo die Verstärkung im Bereich von unsigned nicht wirklich benötigt wird
  4. Festlegen eines Standardwerts für ein Feld (beliebiger Typ) vs. kein Standardwert
    • Beispiel: Aktualisierung einer Zeile, wobei alle Felddaten angegeben werden
  5. Null zulassen vs. Null verweigern
    • Beispiel: Aktualisierung einer Zeile, wobei alle Felddaten angegeben werden

Ich verwende MySQL, aber dies ist eher eine allgemeine Frage.

1voto

Svante Punkte 49287

Nach meinem Verständnis von B-Trees (so werden relationale Datenbanken in der Regel implementiert, nicht wahr?), sollten diese Dinge keinen Unterschied machen. Alles, was Sie brauchen, ist eine schnelle Vergleichsfunktion für Ihren Schlüssel, und es ist in der Regel egal, welchen Bereich von Ganzzahlen Sie verwenden (es sei denn, Sie gehen über die Wortgröße der Maschine hinaus).

Bei Schlüsseln ist ein einheitlicher Standardwert oder das Zulassen von Null natürlich nicht sehr sinnvoll. Bei allen Nicht-Schlüsselfeldern sollte das Zulassen von Null oder das Bereitstellen von Standardwerten keine wesentlichen Auswirkungen haben.

1voto

Lukáš Lalinský Punkte 39243

5000 Zeilen sind fast nichts für eine Datenbank. Sie verwenden normalerweise große B-Bäume für Indizes, so dass sie sich nicht darum kümmern mucho über die Verteilung der Primärschlüssel.

Im Allgemeinen sollte die Entscheidung, ob die anderen Optionen verwendet werden sollen, davon abhängen, was Sie von der Datenbankanwendung benötigen. Sie können die Leistung nicht wesentlich beeinträchtigen. Verwenden Sie also einen Standardwert, wenn Sie einen Standardwert benötigen, verwenden Sie eine NOT NULL Einschränkung, wenn Sie nicht wollen, dass die Spalte NULL .

Wenn Sie Probleme mit der Datenbankleistung haben, sollten Sie nach wichtigeren Problemen suchen, wie z. B. fehlende Indizes, langsame Abfragen, die effizient umgeschrieben werden können, und sicherstellen, dass die Datenbank über genaue Statistiken über die Daten verfügt, damit sie die Indizes richtig verwenden kann (obwohl dies eine Verwaltungsaufgabe ist).

0voto

Quassnoi Punkte 396418

unter Verwendung eines Integer-Primärschlüssels für einen niedrigen/hohen Bereich * 5000 Zeilen mit IDs von 1 bis 5000 * 5000 Zeilen mit IDs von 20001 bis 25000

Es macht keinen Unterschied.

Ganzzahlige PK, die gleichmäßig oder ungleichmäßig inkrementiert. * 5000 Zeilen mit IDs von 1 bis 5000 * 5000 Zeilen mit IDs von 1 bis 30000 verstreut

Wenn die Verteilung gleichmäßig ist, macht dies keinen Unterschied.

Eine gleichmäßige Verteilung kann helfen, eine effizientere Stichprobenabfrage zu erstellen, wie in diesem Artikel in meinem Blog beschrieben:

Es geht um die Verteilung, nicht um die Grenzen: 1, 11, 21, 31 ist OK, 1, 2, 3, 31 ist nicht.

Einstellen einer Integer-PK als unsigned vs. signed * Beispiel: wo die Verstärkung im Bereich von unsigned nicht wirklich benötigt wird

Wenn Sie erklären, dass PRIMARY KEY かわりに UNSIGNED , MySQL kann Prädikate optimieren wie id >= -1

Festlegen eines Standardwerts für ein Feld (beliebiger Typ) vs. kein Standardwert * Beispiel: Eine Zeile wird aktualisiert und alle Felddaten werden angegeben.

Kein Unterschied.

Null zulassen vs. Null verweigern * Beispiel: Aktualisierung einer Zeile und alle Felddaten sind angegeben

Nullbare Spalten sind ein Byte größer: der Indexschlüssel für eine INT NOT NULL es 5 Bytes lang, dass für eine INT NULL es 4 Bytes lang.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X