Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung des Leistungsmessungsvergleichs von MySQL-uuid als Primärschlüssel und int als Primärschlüssel

Detaillierte Erläuterung des Leistungsmessungsvergleichs von MySQL-uuid als Primärschlüssel und int als Primärschlüssel

黄舟
黄舟Original
2018-05-21 10:56:212416Durchsuche

Zufällig habe ich erfahren, dass der Primärschlüsseltyp mysql varchar zum Speichern der UUID verwendet. Die Leistung von query ist nicht so gut wie der Primärschlüsseltyp int. Die Suche nach vielen Informationen im Internet ist nur theoretisch. Daher habe ich den Code selbst zum tatsächlichen Testen geschrieben. Die folgenden Ergebnisse dienen nur als Referenz und sind nicht maßgebend.

Die Felder der drei Tabellen, außer dass die Primärschlüssel-ID Varchar, Bigint bzw. Bigint mit automatischer Erhöhung verwendet, sind die anderen drei Felder alle Varchar 36 Bit

Datenbank: mysql5.5

Tabellentyp: InnoDB

Datenvolumen: 100 W Artikel

Der erste Fall:

Der Primärschlüssel verwendet UUID 32 Bit.

Abfrageanweisung 1 ausführen: SELECT COUNT(id) FROM test_varchar;

Abfrageanweisung 2 ausführen: SELECT * FROM test_varchar WHERE vname='00004629-b052-11e1-96aa-002655b28d7b ';

Abfrageanweisung 3 ausführen: SELECT * FROM test_varchar WHERE id='00004599b05211e196aa002655b28d7b';

Die durchschnittliche von Anweisung 1 verbrauchte Zeit beträgt: 2,7 Sekunden;

Die Zeit Die durchschnittliche Zeit, die von Anweisung 2 verbraucht wird, beträgt: 3 Sekunden; die durchschnittliche Zeit, die von Anweisung 3 verbraucht wird, beträgt: 0 Sekunden (Mehrparteientest, solange eine Primärschlüssel-ID in der Bedingung vorhanden ist). Die Abfragegeschwindigkeit beträgt 000 in Millisekunden. Die ID-Werte des Tests umfassen auch mehr als 900.000 Elemente. Die Abfragezeit ist genau gleich, Millisekunden sind 000)

Der zweite Fall:

Der Primärschlüssel wird verwendet

, verwenden Sie uuid_short(), um Daten zu generieren, die Daten sind eine Folge reiner Zahlen (22461015967875697). (Es entspricht dem automatischen Wachstum, außer dass der feste Basiswert größer ist.) Abfrageanweisung 1 ausführen: SELECT COUNT(id) FROM test_long;

Abfrageanweisung 2 ausführen: SELECT * FROM test_long WHERE vname='d7f28a24-b053-11e1-96aa-002655b28d7b';

Abfrageanweisung 3 ausführen: SELECT * FROM test_long WHERE id='22461015967875702';

Die durchschnittliche Zeit, die von verbraucht wird Aussage 1 beträgt: 1,2 Sekunden; Aussage 2 verbraucht durchschnittlich: 1,40 Sekunden;

Aussage 3 verbraucht durchschnittlich: 0 Sekunden; eine Primärschlüssel-ID in der Bedingung, die Abfragegeschwindigkeit beträgt Millisekunden. Alle Ebenen zeigen 000. Die getesteten ID-Werte reichen von den ersten 100 bis zu den letzten 900.000. Die Abfragezeiten sind genau gleich und die Millisekundenebene beträgt alle 000.

Der dritte Fall:

Abfrageanweisung 1 ausführen: SELECT COUNT(id) FROM test_int;Abfrageanweisung 2 ausführen: SELECT * FROM test_int WHERE vname='c80f8427-b059-11e1-96aa-002655b28d7b ';

Abfrageanweisung 3 ausführen: SELECT * FROM test_int WHERE id=900000;

Der Primärschlüssel verwendet die Automatik Wachstum, das mit MySQL einhergeht

, und die Daten sind reine Zahlen (1, 2, 3, 4, 5...).

Die durchschnittliche Zeit, die von Abfrageanweisung 1 verbraucht wird, beträgt: 1,07 Sekunden; Die durchschnittliche Zeit, die von Abfrageanweisung 2 verbraucht wird, beträgt: 1,31 Sekunden; Aussage 3 lautet: 0 Sekunden ;(Mehrparteientest. Solange die Bedingung eine Primärschlüssel-ID enthält, zeigt die Abfragegeschwindigkeit in Millisekunden 000 an. Die getesteten ID-Werte reichen von den ersten 100 bis über 900.000 . Die Abfragezeit ist genau gleich und die Millisekunden betragen alle 000)

Zusammenfassung

: Es ist ersichtlich, dass die automatische Wachstumsleistung des MySQL-InnoDB-Primärschlüssels höher ist .

Der Autor sagt sich: Bei der normalen Projektentwicklung machen diejenigen mit ID in den Bedingungen der SQL-Anweisung die Mehrheit aus, während diejenigen ohne ID die Minderheit ausmachen. Obwohl der obige Test zeigt, dass die Abfragezeit unabhängig vom Primärschlüsseltyp genau gleich ist, solange die bedingte Anweisung eine Primärschlüssel-ID enthält. Allerdings können Sie nicht garantieren, dass alle SQL-Anweisungen in Ihrem Projekt IDs in den Bedingungen haben, also... Ich glaube, Sie werden bereits verstehen, welcher Typ von Primärschlüssel verwendet werden sollte.

Datenbank: mysql5.5

Tabellentyp: MyISAM

Datenvolumen: 1 Million Stück

Um weniger Wörter zu schreiben und Zeit zu sparen, sind die in diesem Test verwendeten Tabellen und SQL-Anweisungen dieselben wie oben, hier nur die verstrichene Zeit aufzeichnen.

Der erste Fall:

Der Primärschlüssel verwendet UUID 32 Bit.

Die durchschnittliche Zeit, die von Anweisung 1 verbraucht wird, beträgt: 0 Sekunden; Die durchschnittliche Zeit, die von Anweisung 2 verbraucht wird, beträgt: 0,53 Sekunden; Aussage 3 lautet: 0 Sekunden ;(Mehrparteientest, solange in der Bedingung eine Primärschlüssel-ID vorhanden ist, zeigt die Abfragegeschwindigkeit in Millisekunden 000 an. Die getesteten ID-Werte reichen von den ersten 100 bis über 900.000 . Die Abfragezeit ist genau gleich und die Millisekunden sind alle 000 )

Der zweite Fall:

Der Primärschlüssel verwendet bigint

Verwenden Sie uuid_short(), um Daten zu generieren. Die Daten sind eine Folge reiner Zahlen (22461015967875697). (Es entspricht dem automatischen Wachstum, außer dass der feste Basiswert größer ist.)

Die durchschnittliche von Anweisung 1 verbrauchte Zeit beträgt: 0 Sekunden;

Die durchschnittliche von Anweisung 2 verbrauchte Zeit beträgt : 0,51 Sekunden;

Die durchschnittliche Verbrauchszeit von Anweisung 3 beträgt: 0 Sekunden (Mehrparteientest, solange eine Primärschlüssel-ID in der Bedingung vorhanden ist, wird die Abfragegeschwindigkeit 000 in Millisekunden angezeigt. Die getesteten ID-Werte reichen von den ersten 100 bis über 900.000) Die Abfragezeit ist genau gleich und die Millisekundenebene beträgt 000)

Der dritte Fall:

Der Der Primärschlüssel verwendet das automatische Wachstum, das mit MySQL einhergeht. Die Daten sind reine Zahlen (1, 2, 3, 4, 5 ...).

Die durchschnittliche Zeit, die von Anweisung 1 verbraucht wird, beträgt: 0 Sekunden; Die durchschnittliche Zeit, die von Anweisung 2 verbraucht wird, beträgt: 0,48 Sekunden; : 0 Sekunden; (Mehrere Parteien Im Test zeigt die Abfragegeschwindigkeit in Millisekunden 000 an, solange eine Primärschlüssel-ID in der Bedingung vorhanden ist. Die getesteten ID-Werte umfassen die ersten hundert und die letzten 900.000. Die Abfrage Die Zeit ist genau gleich und die Millisekundenstufe beträgt 000)

Zusammenfassung: Es ist ersichtlich, dass die automatische Wachstumsleistung des MySQL-MyISAM-Primärschlüssels einen leichten Vorteil gegenüber anderen hat. Die Testdaten betragen 1000 W und 100 Millionen. Wenn Sie auch fremdschlüsselbezogene Abfragen haben, wird dieser Vorteil noch deutlicher. Wenn das von Ihnen entworfene System ein Datenvolumen von nicht mehr als 1 Million hat, spielt es natürlich keine Rolle, welchen Primärschlüsseltyp Sie verwenden. Bei meinem Testcomputer handelt es sich um einen professionellen Server. Diese Tests von MySQL MyISAM können den Zeitunterschied überhaupt nicht messen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Leistungsmessungsvergleichs von MySQL-uuid als Primärschlüssel und int als Primärschlüssel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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