Heim Datenbank MySQL-Tutorial Die Verbindung zwischen MySQL-Sperren und Indizes

Die Verbindung zwischen MySQL-Sperren und Indizes

Mar 17, 2018 am 10:33 AM
mysql 索引 联系

Wenn wir normalerweise MySQL-Sperren verwenden, berücksichtigen wir selten die Effizienz von Sperren, wenn wir mit Datenbanken noch nicht vertraut sind. Im Allgemeinen möchten wir nur den Zweck erreichen, Parallelität zu verhindern. Mit zunehmender Datenmenge werden wir jedoch feststellen, dass dies der Fall ist Es gibt viele. Wir haben SQL geschrieben, das sehr optimiert ist, aber manchmal ist es immer noch sehr langsam und es ist schwierig, den Grund zu finden. Zu diesem Zeitpunkt sollten wir überlegen, ob es durch die Sperre von MySQL verursacht wird.

Wir erstellen zunächst eine neue Datentabelle:


Hier ist unser Primärschlüssel standardmäßig indiziert; Fügen Sie hier ein paar Daten hinzu


Dann öffnen wir zwei Prozesse zum Testen:


Fügen Sie zunächst eine Where-Bedingung hinzu, die keine Indexsperre beinhaltet:


Dann aktualisieren wir die Daten dieser Zeile im zweiten Fenster, wir werden es finden dass dieser Vorgang hängen bleibt,



Wenn wir dann die Transaktion einreichen, finden wir die Daten von das zweite Fenster Es wird sofort ausgeführt.

Aus dem oben Gesagten scheint es kein Problem zu geben. Dies erreicht zwar den von uns gewünschten Zweck, Sie können jedoch die gleiche Sperre hinzufügen und versuchen, andere Daten zu aktualisieren, z Was ich unten ausgeführt habe Daten:

Ich habe die oben genannten drei Situationen mit demselben Prozess getestet. Sie werden alle stecken bleiben, daher tritt das Problem auf. Wir sperren tatsächlich name='test name' Wir möchten die beiden Zeilen id=133 und 134 sperren, aber wir können nicht auf diese drei Zeilen zugreifen, da es sich bei unserer Sperre um eine Tabellensperre handelt Verwenden des Index:

Der Index wird verwendet, wenn die obige Sperre verwendet wird, aber wir stecken immer noch beim Aktualisieren der Daten fest. Wir werden das Gefühl haben, dass der Index tatsächlich auch vorhanden ist nutzlos, aber wenn Sie auf dieselbe Sperre stoßen und beim Aktualisieren der Daten den Index verwenden, können Sie den Effekt sehen:


Wir werden feststellen, dass dies nicht gesperrt ist . Live, direkt aktualisiert;

Das Folgende ist eine Zusammenfassung: Wenn unsere Sperre einen Index verwendet, handelt es sich um eine Zeilensperre. Wenn sie keinen Index verwendet, handelt es sich um eine Tabellensperre Die von uns verwalteten Daten müssen eine Sperre verwenden Index, wir verwenden ihn beim Auswählen oder Positionieren von Daten. Er wird in Form eines vollständigen Tabellenscans ausgeführt, der eine Tabellensperre bildet. Wenn ein Index vorhanden ist, wird die angegebene Zeile direkt lokalisiert Beachten Sie jedoch, dass beim Aktualisieren der Daten die gesamte Tabelle gesperrt wird, wenn die gesperrte Zeile gescannt wird, sodass der gewünschte Effekt nicht erzielt werden kann erreicht werden;

Verwandte Empfehlungen:

MySQL-Sperrmechanismus_MySQL


MySQL-Sperrverwendungssperre auf Tabellenebene

So optimieren Sie die MySQL-Sperre

Das obige ist der detaillierte Inhalt vonDie Verbindung zwischen MySQL-Sperren und Indizes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen May 08, 2024 am 10:24 AM

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Wie optimiert man die MySQL-Abfrageleistung in PHP?

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP?

Welche Anwendungsszenarien gibt es für Java-Aufzählungstypen in Datenbanken? Welche Anwendungsszenarien gibt es für Java-Aufzählungstypen in Datenbanken? May 05, 2024 am 09:06 AM

Welche Anwendungsszenarien gibt es für Java-Aufzählungstypen in Datenbanken?

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein?

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP?

Strategien zur Leistungsoptimierung für PHP-Array-Paging Strategien zur Leistungsoptimierung für PHP-Array-Paging May 02, 2024 am 09:27 AM

Strategien zur Leistungsoptimierung für PHP-Array-Paging

See all articles