Wird der Index in der MySQL-Abfragebedingung verwendet?

Wird der Index in der MySQL-Abfragebedingung verwendet?

Wenn Sie ein Arbeitgeber fragt, ob in einer MySQL-Abfragebedingung ein Index verwendet wird, wie sollten Sie antworten?

Antwort: Möglicherweise müssen Sie einen Index verwenden

Lass es uns testen

1. Erstellen Sie eine Tabelle und indizieren Sie den Feldport

Tabelle erstellen `pre_request_logs_20180524` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `ip` char(16) NICHT NULL KOMMENTAR 'Proxy IP',
 `port` int(8) NOT NULL COMMENT 'Portnummer',
 `status` enum('Erfolg','Misserfolg') NICHT NULL KOMMENTAR 'status',
 `create_time` datetime NICHT NULL KOMMENTAR 'Erstellungszeit',
 `update_time` datetime STANDARD NULL BEIM UPDATE CURRENT_TIMESTAMP,
 Primärschlüssel (`id`),
 SCHLÜSSEL `idx_port` (`port`) MIT BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='Proxy-IP-Anforderungsprotokoll';

Testdaten einfügen

INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (1, '192.168.1.199', 53149, 'Fehlgeschlagen', '2018-05-24 14:55:34', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (2, '192.168.1.100', 10653, 'Erfolgreich', '24.05.2018 14:55:54', '16.11.2018 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (3, '192.168.1.112', 50359, 'Fehlgeschlagen', '2018-05-24 14:56:00', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (4, '192.168.1.67', 30426, 'Fehlgeschlagen', '2018-05-24 14:56:09', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (5, '192.168.1.209', 49323, 'Fehlgeschlagen', '2018-05-24 14:56:12', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (6, '192.168.1.209', 51161, 'Erfolgreich', '24.05.2018 14:56:13', '16.11.2018 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (7, '192.168.1.12', 54167, 'Erfolgreich', '2018-05-24 14:56:16', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (8, '192.168.1.64', 20462, 'Erfolgreich', '24.05.2018 14:56:19', '16.11.2018 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (9, '192.168.1.53', 22823, 'Fehlgeschlagen', '2018-05-24 14:56:31', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (10, '192.168.1.85', 48229, 'Erfolgreich', '24.05.2018 14:56:32', '16.11.2018 11:01:11');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (11, '192.168.1.85', 48229, 'Erfolgreich', '24.05.2018 14:56:32', '16.11.2018 11:01:15');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (12, '192.168.1.85', 48229, 'Erfolgreich', '24.05.2018 14:56:32', '16.11.2018 13:34:37');

2. SQL testen

Erläutern Sie „select * from pre_request_logs_20180524“, wobei Port in (51161,20462,48229) ist.

Ausführungsergebnisse

Aus den Ergebnissen geht hervor, dass der Index nicht verwendet wird. Aber ziehen Sie keine voreiligen Schlüsse. Sehen wir uns die beiden SQL-Anweisungen an.

Wählen Sie * aus pre_request_logs_20180524, wobei Port in (51161,48229) ist;
Wählen Sie * aus pre_request_logs_20180524, wobei Port in (51161,20462) ist;

Die Ausführungsergebnisse sind wie folgt

Sie können sehen, dass die zweite SQL-Anweisung einen Index verwendet. Der Unterschied zwischen den beiden SQL-Anweisungen besteht darin, dass der Portwert unterschiedlich ist. Eine enthält 48229 und die andere 20462.

Tatsächlich ermittelt der MySQL-Optimierer automatisch, ob der sekundäre Index verwendet wird, also der Index des Portfelds.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • MySQL ruft Daten basierend auf dem JSON-Feldinhalt als Abfragebedingung ab (einschließlich JSON-Arrays).
  • Der Unterschied und die Gründe zwischen den MySQL-Abfragebedingungen nicht in und in
  • Detaillierte Erläuterung des Problems der Übereinstimmung, selbst wenn in der MySQL-Abfragebedingung am Ende der Zeichenfolge ein Leerzeichen steht
  • Detaillierte Erklärung der allgemeinen Verwendung von MySQL-Abfragebedingungen
  • Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen
  • MySQL erklärt, wie man Abfragebedingungen optimiert

<<:  Detaillierte Erklärung der Lösung für das Problem der zu kleinen Ubuntu-Systemschnittstelle in vmware14Pro

>>:  Vue implementiert Login-Sprung

Artikel empfehlen

MySQL-Datumsfunktionen und Datumskonvertierungs- und -formatierungsfunktionen

MySQL ist eine kostenlose relationale Datenbank m...

Reiner CSS-Code zum Erzielen eines Drag-Effekts

Inhaltsverzeichnis 1. Beispiel für Drag-Effekt 2....

Implementierung eines Docker-Cross-Host-Netzwerks (Overlay)

1. Docker-Cross-Host-Kommunikation Zu den hostübe...

Tutorial zur Installation von VMware WorkStation 14 Pro unter Ubuntu 17.04

In diesem Artikel wird die spezifische Methode zu...

Detaillierte Erläuterung des MySQL InnoDB-Sekundärindex-Sortierbeispiels

Sortierproblem Ich habe kürzlich auf Geek Time „4...

Detaillierte Erklärung der Box-Größe in CSS3 (Content-Box und Border-Box)

Box-Größe in CSS3 (Inhaltsbox und Rahmenbox) Mit ...

Natives JS zur Implementierung eines Hover-Dropdown-Menüs

JS implementiert ein Hover-Dropdown-Menü. Dies is...

Beispielcode zum Konvertieren des Mysql-Abfrageergebnissatzes in JSON-Daten

Mysql konvertiert Abfrageergebnissatz in JSON-Dat...

Tiefgreifendes Verständnis von Worker-Threads in Node.js

Inhaltsverzeichnis Überblick Die Geschichte der C...

Erste Erkundung gängiger Befehle für Docker-Anfänger

Bevor wir Docker offiziell verwenden, machen wir ...

Allgemeine Verwendung von regulären Ausdrücken in MySQL

Allgemeine Verwendung von Regexp in Mysql Fuzzy-M...

Implementierung eines Element-Eingabefelds, das automatisch den Fokus erhält

Beim Erstellen eines Formulars in einem aktuellen...

uni-app implementiert NFC-Lesefunktion

In diesem Artikel wird der spezifische Code der U...