Eine kurze Analyse, ob der MySQL-Primärschlüssel Zahlen oder UUIDs für schnellere Abfragen verwendet

Eine kurze Analyse, ob der MySQL-Primärschlüssel Zahlen oder UUIDs für schnellere Abfragen verwendet

Bei der tatsächlichen Entwicklung kann der Primärschlüssel von MySQL nicht wiederholt werden und der Primärschlüssel kann automatisch erhöht werden. Um die Duplizierung des Primärschlüssels zu verhindern, kann ein Algorithmus wie der Snowflake-Algorithmus verwendet werden. Beide Arten von Primärschlüsseln werden als Zahlentypen gespeichert, aber bei der tatsächlichen Entwicklung kann UUID als Primärschlüssel generiert werden. Die Frage ist also, welcher Primärschlüssel ist effizienter?

Durch Tests wird Folgendes überprüft:

1. Zuerst erstellen wir eine Tabelle, generieren mithilfe einer gespeicherten Prozedur 1 Million Daten und analysieren diese dann:

Erstellen Sie die Tabelle:

TABELLE ERSTELLEN `my_tables` (
`id` VARCHAR(32) NICHT NULL,
`name` varchar(32) DEFAULT NULL,
`Alter` int(32) DEFAULT NULL,
`Zeit` varchar(32) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

Erstellen Sie eine gespeicherte Prozedur:

DROP-VERFAHREN, WENN EXISTIERT my_insert;
PROZEDUR ERSTELLEN my_insert()
BEGINNEN
DECLARE n int DEFAULT 1;
Schleifenname:LOOP
INSERT INTO `my_tables`(`name`,`age`,`time`,`pwd`) VALUES ('Name', 18, '0:0:0:0:0:0:0:1', '369');
Setze n = n + 1;
WENN n=1000000 DANN
LEAVE Schleifenname;
ENDE, WENN;
END LOOP Schleifenname;
ENDE;

Daten generieren:

Rufen Sie my_insert() auf;

Die erste Methode verwendet einen Primärschlüssel vom Typ „Zahl“.

Die folgende Abbildung ergibt sich aus der Erläuterung der Analyse

2. Erstellen Sie anschließend eine weitere Tabelle und generieren Sie Daten

TABELLE ERSTELLEN `my_tables2` (
`id` VARCHAR(32) NICHT NULL,
`name` varchar(32) DEFAULT NULL,
`Alter` int(32) DEFAULT NULL,
`Zeit` varchar(32) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

Hinweis: Der Primärschlüssel dieser Tabelle ist vom Typ varchar.

Erstellen Sie eine gespeicherte Prozedur und generieren Sie Daten:

VERFAHREN LÖSCHEN, WENN PROC_INSERT VORHANDEN IST;
TRENNUNGSZEICHEN $
PROZEDUR ERSTELLEN pro_insert2()
BEGINNEN
DECLARE i INT DEFAULT 1;
WÄHREND i<=1000000 DO
INSERT INTO `my_tables2`(id,`name`,`age`,`time`,`pwd`) VALUES (i,'Name', 18, '0:0:0:0:0:0:0:1', '369');
Setze i = i+1;
ENDE WÄHREND;
ENDE $;

Rufen Sie pro_insert2();

Die folgende Abbildung zeigt das Ergebnis der zweiten Abfrage mit dem Primärschlüssel

Wenn Sie die Erklärung nicht verstehen, können Sie den Blog https://blog.csdn.net/why15732625998/article/details/80388236 besuchen.

Die Analyse zeigt, dass der Unterschied in der Abfrageeffizienz zwischen der Verwendung von UUID oder Zahlen als Primärschlüssel nicht so groß ist wie erwartet und fast ignoriert werden kann. Nur key_len ist etwas anders.

key_len: gibt die Anzahl der im Index verwendeten Bytes an. Mit dieser Spalte kann die Länge des in der Abfrage verwendeten Indexes berechnet werden.不損失精確性的情況下,長度越短越好. Der von key_len angezeigte Wert ist die maximal mögliche Länge des Indexfelds, nicht die tatsächlich verwendete Länge. Das heißt, key_len wird basierend auf der Tabellendefinition berechnet und nicht aus der Tabelle abgerufen.

Damit ist dieser Artikel darüber, ob es schneller ist, Zahlen oder UUIDs für MySQL-Primärschlüssel zu verwenden, abgeschlossen. Weitere Informationen dazu, ob Zahlen oder UUIDs für MySQL-Primärschlüssel verwendet werden sollten, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • MySQL-Abfrageoptimierung: Verwenden von Unterabfragen anstelle von Join-Abfragebeispielen mit Nicht-Primärschlüsseln
  • Detaillierte Erklärung, warum die MySQL-Primärschlüsselabfrage so schnell ist

<<:  Methoden und Techniken zur Gestaltung einer interessanten Website (Bild)

>>:  Beispielcode für einen coolen Atemeffekt mit CSS3+JavaScript

Artikel empfehlen

Beispiel zur Optimierung der MySQL-Einfügeleistung

MySQL-Leistungsoptimierung Die MySQL-Leistungsopt...

Eine kurze Analyse des Unterschieds zwischen ref und toRef in Vue3

1. ref wird kopiert, die Ansicht wird aktualisier...

Welche Vorteile bietet die Verwendung eines B+-Baums als Indexstruktur in MySQL?

Vorwort In MySQL verwenden sowohl Innodb als auch...

So verwenden Sie den Fuser-Befehl im Linux-System

Was ist Fuser Command? Der Befehl fuser ist ein s...

Detailliertes Tutorial zur Installation von MySQL auf CentOS 6.9

1. Bestätigen Sie, ob MySQL installiert wurde. Si...

MySQL-Datenbank implementiert MMM-Hochverfügbarkeitsclusterarchitektur

Konzept MMM (Master-Master-Replikationsmanager fü...

960 Grid System – Grundprinzipien und Verwendung

Natürlich gibt es auch viele Leute, die die gegent...

js, um einen einfachen Kalendereffekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Detaillierte Erklärung zum einfachen Wechseln von CSS-Themen

Ich habe meiner persönlichen Website vor Kurzem e...

Beispiel für eine Nginx-Cache-Konfiguration

Beim Entwickeln und Debuggen einer Webanwendung s...