ProblemübersichtHeute hat der DBA bei der Arbeit plötzlich einen SQL-Teil gefunden, der darauf hinwies, dass das SQL eine implizite Konvertierung aufwies und den Index nicht verwendete. Nach der Überprüfung stellten wir fest, dass es sich um ein Feld vom Typ varchar handelte. Wir verwendeten Bedingungen, um einen numerischen Wert zu übergeben. Aus Bedenken hinsichtlich einer Verletzung der Vertraulichkeitsvereinbarung werde ich das Bild hier nicht veröffentlichen. Lassen Sie mich eine ähnliche Situation reproduzieren, damit sie jeder sehen kann. Reproduktion des ProblemsZuerst erstellen wir eine Benutzertabelle test_user, in der USER_ID auf den Typ varchar gesetzt und der Wirkung halber ein eindeutiger Index hinzugefügt wird. CREATE TABLE test_user ( ID int(11) NICHT NULL AUTO_INCREMENT, USER_ID varchar(11) DEFAULT NULL COMMENT 'Benutzerkonto', USER_NAME varchar(255) DEFAULT NULL COMMENT 'Benutzername', AGE int(5) DEFAULT NULL COMMENT 'Alter', COMMENT varchar(255) DEFAULT NULL COMMENT 'Einführung', PRIMÄRSCHLÜSSEL (ID) EINZIGARTIGER SCHLÜSSEL UNIQUE_USER_ID (USER_ID) MIT BTREE )ENGINE=InnoDB STANDARD-CHARSET=utf8; Die Tabellendaten sind wie folgt (die Daten verwenden immer noch dieselben Daten wie im letzten MySQL-Artikel. MySQL verwendet UNION, um zwei Abfragen zu verbinden, und das Sortieren schlägt fehl. Beachten Sie jedoch, dass die Tabellenstruktur anders ist.)
Als nächstes führen wir das folgende SQL aus EXPLAIN SELECT * FROM Testbenutzer WHERE USER_ID = 111; Die gegebenen Erklärungen lauten wie folgt:
Wir setzen die Bedingung in Anführungszeichen und erläutern sie wie folgt: EXPLAIN SELECT * FROM Testbenutzer WHERE USER_ID = '111'; Zu diesem Zeitpunkt haben wir festgestellt, dass das Feld vom Typ varchar den Index verwendet, wenn es als Zeichenfolge abgefragt wird, den Index jedoch nicht verwendet, wenn es als numerischer Typ abgefragt wird. ProblemerweiterungDie Frage ist also: Wenn das Feld eine Ganzzahl ist und über einen Index verfügt, wird der Index bei einer Abfrage mit einer Zeichenfolge nicht verwendet? Übung macht den Meister, lasst es uns weiter testen. -- Ändern Sie den Typ der USER_ID in eine Ganzzahl, CREATE TABLE test_user ( ID int(11) NICHT NULL AUTO_INCREMENT, USER_ID int(11) DEFAULT NULL COMMENT 'Benutzerkonto', USER_NAME varchar(255) DEFAULT NULL COMMENT 'Benutzername', AGE int(5) DEFAULT NULL COMMENT 'Alter', COMMENT varchar(255) DEFAULT NULL COMMENT 'Einführung', Primärschlüssel (ID), EINZIGARTIGER SCHLÜSSEL UNIQUE_USER_ID (USER_ID) MIT BTREE ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; EXPLAIN SELECT * FROM Testbenutzer WHERE USER_ID = 111; EXPLAIN SELECT * FROM Testbenutzer WHERE USER_ID = '111'; Nach der Ausführung der beiden obigen Anweisungen haben wir festgestellt, dass Felder vom Typ int indiziert werden, unabhängig davon, ob sie als Zeichenfolgen oder numerische Werte abgefragt werden. abschließend
Zusammenfassend denke ich, dass es in Zukunft am besten ist, beim Schreiben von SQL Anführungszeichen hinzuzufügen, um zu vermeiden, dass Zeichenfolgentypen nicht indiziert werden. Die tieferen Prinzipien müssen weiter untersucht werden. Wenn Sie Meinungen dazu haben, diskutieren Sie diese bitte. Dies ist das Ende dieses Artikels über die Ungültigkeitserklärung oder implizite Konvertierung des MySql-Integer-Index und des String-Index. Weitere Informationen zur Ungültigkeitserklärung des MySql-Integer-Index und des String-Index 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:
|
<<: So schreiben Sie HTML-Header in der Webentwicklung für mobile Geräte
>>: Unabhängige Implementierung der Nginx-Containerkonfigurationsdatei
Es ist ganz einfach, Nachrichten an andere Benutz...
Vor kurzem traten bei der Installation von Apache...
Inhaltsverzeichnis VMware BurpSuite 1. Virtuelles...
Ich habe das ganze Internet durchsucht und bin au...
So ändern Sie den Stil der von elementUI bereitge...
MySQL-Batch löschen großer Datenmengen Angenommen...
Inhaltsverzeichnis 1. Kern 1. Holen Sie sich den ...
Inhaltsverzeichnis Einstellungen für den abgesich...
Ich bin heute auf ein Problem gestoßen. Beim Eing...
Dieser Artikel soll Ihnen vor allem dabei helfen,...
Inhaltsverzeichnis Der Ursprung von JSBridge Das ...
In diesem Artikel finden Sie das Installations-Tu...
In diesem Artikel finden Sie das Tutorial zur Ins...
Inhaltsverzeichnis 1. Das Konzept der Schließung ...
Vorwort Beim Schreiben von Code stoßen wir gelege...