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
1. Inline-Referenz: Wird direkt auf dem Etikett v...
Haben Sie schon einmal eine Situation erlebt, in d...
In diesem Artikel wird der spezifische Code von v...
Inhaltsverzeichnis Frage 1. Installieren Sie webp...
Inhaltsverzeichnis Vorwort Aufgabenliste tun Sie ...
Ich werde nicht erklären, was CUDA ist, sondern d...
In diesem Artikelbeispiel wird der spezifische Co...
Die Verbindungsmethode in der MySQL-Tabelle ist e...
Inhaltsverzeichnis 1. Gojs-Implementierung 1. Zei...
Inhaltsverzeichnis Ergebnisse erzielen Einführung...
Inhaltsverzeichnis Ein Set ist eine spezielle Sam...
eins, G:\MySQL\MySQL Server 5.7\bin> mysqld --...
Um die von uns erstellten Images zentral zu verwa...
1. Flex-Grow-, Flex-Shrink- und Flex-Basis-Eigens...
Seit Zabbix Version 3.0 wird verschlüsselte Kommu...