Vor ein paar Tagen stellte mir ein Kollege eine Frage zum MySQL-Index. Obwohl ich ihn ungefähr kenne, möchte ich ihn trotzdem ausprobieren. Ist es möglich, Indizes für Abfragen wie „ist null“ und „ist nicht null“ zu verwenden? Vielleicht heißt es in einigen Artikeln im Internet, dass Indizes nicht verwendet werden können, aber tatsächlich ist das nicht der Fall. Schauen wir uns ein kleines Experiment an CREATE TABLE `null_index_t` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `null_key` varchar(255) DEFAULT NULL, `null_key1` varchar(255) DEFAULT NULL, `null_key2` varchar(255) DEFAULT NULL, Primärschlüssel (`id`), SCHLÜSSEL `idx_1` (`null_key`) MIT BTREE, SCHLÜSSEL `idx_2` (`null_key1`) MIT BTREE, SCHLÜSSEL `idx_3` (`null_key2`) MIT BTREE )ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Verwenden einer gespeicherten Prozedur zum Einfügen von Daten Trennzeichen $ #Verwenden Sie ein Trennzeichen, um das Ende der gespeicherten Prozedur zu markieren. $ zeigt das Ende der gespeicherten Prozedur an. create procedure nullIndex1() beginnen deklariere i int; deklariere j int; setze i=1; setze j=1; während(i<=100) mache während(j<=100) mache WENN (i % 3 = 0) DANN INSERT INTO null_index_t (`null_key`, `null_key1`, `null_key2`) VALUES (null, LEFT(MD5(RAND()), 8), LEFT(MD5(RAND()), 8)); SONST WENN (i % 3 = 1) DANN INSERT INTO null_index_t ( `null_key`, `null_key1`, `null_key2` ) VALUES (LEFT(MD5(RAND()), 8), NULL, LEFT(MD5(RAND()), 8)); ANDERS INSERT INTO null_index_t ( `null_key`, `null_key1`, `null_key2` ) VALUES (LEFT(MD5(RAND()), 8), LEFT(MD5(RAND()), 8), NULL); ENDE, WENN; setze j=j+1; Ende während; setze i=i+1; setze j=1; Ende während; Ende $ rufen Sie nullIndex1() auf; Dann schauen Sie sich unsere is null Abfrage an ERKLÄREN Sie, dass „select * from null_index_t“ ist, wobei „null_key“ null ist; Schauen wir uns ein anderes an ERKLÄREN Sie, dass „select * from null_index_t“ ist, wobei „null_key“ nicht null ist; Was können wir von hier aus sehen? Denken Sie darüber nach. Aus dem Obigen können wir ersehen, dass is null indiziert werden sollte, es handelt sich also zumindest nicht um eine pauschale Regel. is not null scheint jedoch nicht zu funktionieren. Nehmen wir eine kleine Änderung vor und ändern die Daten in dieser Tabelle in 9100 null und die restlichen 900 haben Werte. Führen wir dann den folgenden Befehl aus: Schauen wir uns dann die Ausführungsergebnisse an ERKLÄREN Sie, dass „select * from null_index_t“ ist, wobei „null_key“ null ist; ERKLÄREN Sie, dass „select * from null_index_t“ ist, wobei „null_key“ nicht null ist; Ist es anders? Hier möchte ich hinzufügen, dass das im Experiment verwendete MySQL 5.7 ist und die Konsistenz anderer Versionen nicht garantiert ist. Oben finden Sie ausführliche Informationen zum MySQL-Index. Weitere Informationen zum MySQL-Index finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Fragen und Antworten: Unterschiede zwischen XML und HTML
>>: Detaillierte Erläuterung der Keep-Alive- und Unified-Routing-Verarbeitung von Vue3-Cache-Seiten
Beispielcode: importiere java.util.Random; import...
Als ich kürzlich an einem Übungsprojekt arbeitete...
Inhaltsverzeichnis 01 Problembeschreibung 02 Lösu...
Als ich mir heute die Laborprojekte ansah, stieß ...
Inhaltsverzeichnis 1. Was ist eine Unterabfrage? ...
Vorwort Anwendungsszenario: Wahrscheinlich muss d...
Inhaltsverzeichnis Was ist eine Zuordnung? Unters...
Wie unten dargestellt: Aktualisiere Tabelle1 als ...
Der spezifische Code lautet wie folgt: <Stil&g...
Wie wird die MySQL-Select-Anweisung ausgeführt? I...
1. Alipay-Methode: Alipay-Methode: Klicken Sie zu...
verwenden <div id="app"> <rout...
Die Betriebsumgebung dieses Tutorials: Windows 7-...
Als leistungsstarker Editor mit umfangreichen Opt...
1. Mehrere Aufrufe eines einzelnen Pfeils Sobald ...