Detaillierte Erklärung des Unterschieds zwischen in und exists in MySQL

Detaillierte Erklärung des Unterschieds zwischen in und exists in MySQL

Bildbeschreibung hier einfügen

4. existiert und in

Was ist der Unterschied zwischen „in“ und „exists“? Wann sollten wir „in“ und wann „exists“ verwenden?

Erinnern wir uns zunächst an die Formel und sprechen dann über die Details! " Wenn die äußere Abfragetabelle kleiner als die Unterabfragetabelle ist, verwenden Sie „existiert“. Wenn die äußere Abfragetabelle größer als die Unterabfragetabelle ist, verwenden Sie „in“. Wenn die äußere und die Unterabfragetabelle ähnlich sind, verwenden Sie die von Ihnen bevorzugte Tabelle. "

Ich denke, Sie haben bereits gesehen, dass es nicht für die Verwendung geeignet ist, wenn die Daten in der Obsttabelle sehr umfangreich sind, da alle Daten in der Obsttabelle höchstens einmal durchlaufen werden.

Wenn beispielsweise die Tabelle „Lieferanten“ 10.000 Datensätze und die Tabelle „Obst“ 1.000.000 Datensätze enthält, beträgt die maximale Anzahl der möglichen Durchläufe 10.000*1.000.000 Mal, was sehr ineffizient ist.

Wenn beispielsweise die Tabelle „Lieferanten“ 10.000 Datensätze und die Tabelle „Obst“ 100 Datensätze enthält, beträgt die maximal mögliche Durchquerung 10.000 x 100 Mal, was die Anzahl der Durchquerungen erheblich reduziert und die Effizienz erheblich verbessert.

Allerdings: Die Tabelle „Lieferanten“ hat 10.000 Datensätze und die Tabelle „Obst“ hat 100 Datensätze, dann wird exists() trotzdem 10.000 Mal ausgeführt. Es ist besser, in() zu verwenden, um 10.000*100 Mal zu durchlaufen, da in() im Speicher durchläuft und exists() die Datenbank abfragen muss. Wir alle wissen, dass das Abfragen der Datenbank mehr Leistung verbraucht und der Speicher schneller ist.

Daher müssen wir uns nur die Formel merken: „Wenn die äußere Abfragetabelle kleiner als die Unterabfragetabelle ist, verwenden Sie „existiert“. Wenn die äußere Abfragetabelle größer als die Unterabfragetabelle ist, verwenden Sie „in“. Wenn die äußere und die Unterabfragetabelle ähnlich sind, verwenden Sie, was Sie möchten.“

5. nicht existiert und nicht in

Bildbeschreibung hier einfügen

Wie bei exists() wird der ID-Index der Lieferanten verwendet, exists() wird so oft ausgeführt, wie fruits.length, und der Ergebnisset von exists() wird nicht zwischengespeichert.

Bildbeschreibung hier einfügen

Denn „not in“ ist im Wesentlichen gleich != and != ··· , und da != den Index nicht verwendet, verwendet „not in“ den Index nicht.

Warum wird der Index nicht verwendet?

Wir gehen davon aus, dass 1 Million Daten vorhanden sind und s_id nur zwei Werte hat: 0 und 1. Um den Index zu verwenden, müssen wir zuerst die Indexdatei lesen, dann eine binäre Suche durchführen, um den entsprechenden Datenträgerzeiger zu finden, und dann die entsprechenden Daten auf dem Datenträger basierend auf dem gelesenen Zeiger verwenden, was sich auf den Ergebnissatz von 500.000 auswirkt. In diesem Fall ist es offensichtlich, was schneller ist als ein direkter vollständiger Tabellenscan.

Wenn Ihr S_ID-Feld eindeutig ist, wird der Index verwendet.

Wenn Sie einen Index verwenden müssen, können Sie die Indexierung erzwingen, die Effizienz wird dadurch jedoch nicht verbessert und der Vorgang ist im Allgemeinen langsamer.

Verwenden Sie Indizes richtig. Die Kardinalität ist ein wichtiger Indikator. Wenn sie zu klein ist, ist das dasselbe, als ob überhaupt keine Indizes vorhanden wären, und es verschwendet ebenfalls Speicherplatz.

Daher ist es unabhängig von der Größe der Lieferanten und Früchte effizienter, nicht vorhandenes zu verwenden.

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung des Unterschieds zwischen „in“ und „existiert“ in MySQL. Weitere Informationen zum Unterschied zwischen „in“ und „existiert“ in MySQL finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Vergleich der Verwendung von EXISTS und IN in MySQL
  • Grundlegende Verwendung von exists, in und any in MySQL
  • Einführung in die Verwendung und den Unterschied zwischen „in“ und „exists“ in MySQL
  • Vergleichende Analyse von IN und Exists in MySQL-Anweisungen
  • MySQL existiert und in detaillierter Erklärung und Unterschied
  • Zusammenfassung der Unterschiede zwischen In-Query und Exist-Query in MySQL
  • MYSQL IN- und EXISTS-Optimierungsbeispiele
  • mysql nicht drin, linker Join, IST NULL, EXISTIERT NICHT Effizienzproblem-Datensatz

1. Bereiten Sie sich im Voraus vor

Zu Ihrer Bequemlichkeit erstelle ich hier zwei Tabellen und füge ihnen einige Daten hinzu.

Ein Tisch für Obst, ein Tisch für Lieferanten.

Obsttisch Obsttisch

f_id f_name f_preis
a1 Apfel 5
a2 Aprikose 2
b1 Brombeere 10
b2 Beere 8
c1 Konto 9

Lieferantentabelle Lieferantentabelle

s_id s_name
101 Regenbogen
102 Walmart
103 Carrefour
104 Chinas Vorreiter bei Rohstoffen

Wir werden diese beiden Tabellen zur Demonstration verwenden.

2. Was existiert

Der Parameter, der dem Schlüsselwort exists folgt, ist eine beliebige Unterabfrage. Das System verarbeitet die Unterabfrage, um zu bestimmen, ob sie Zeilen zurückgibt. Wenn mindestens eine Zeile zurückgegeben wird, ist das Ergebnis von exists true und die äußere Abfrageanweisung wird abgefragt. Wenn die Unterabfrage keine Zeilen zurückgibt, ist das Ergebnis von exists false und die äußere Anweisung wird nicht abgefragt.

Es ist zu beachten, dass MySQL unsere Unterabfrage immer noch als True betrachtet, wenn sie SELECT NULL lautet.

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

3. Was ist in

Wenn das Schlüsselwort „in“ für eine Unterabfrage verwendet wird, gibt die innere Abfrageanweisung nur eine Datenspalte zurück und der Wert dieser Datenspalte wird der äußeren Abfrageanweisung für Vergleichsvorgänge bereitgestellt.

Um das Schlüsselwort „in“ zu testen, habe ich der Tabelle „fruit“ eine Spalte „s_id“ hinzugefügt.

Obsttisch Obsttisch

f_id f_name f_preis s_id
a1 Apfel 5 101
a2 Aprikose 2 103
b1 Brombeere 10 102
b2 Beere 8 104
c1 Konto 9 103

<<:  Browserübergreifender lokaler Speicher Ⅰ

>>:  Wissen Sie, welche Möglichkeiten es gibt, in Vue Routen zu überspringen?

Artikel empfehlen

Detaillierte Analyse der MySQL-Indexdatenstruktur

Inhaltsverzeichnis Überblick Indexdatenstruktur B...

Sehr detaillierte Anleitung zum Upgrade der MySQL-Version

Inhaltsverzeichnis 1. Einleitung 2. Sichern Sie d...

Hinweise zu den Formularkomponenten des Elements

Elementform und Codeanzeige Weitere Einzelheiten ...

Das WeChat-Applet implementiert den Wasserfallfluss, Paging, Scrollen und Laden

In diesem Artikel wird der spezifische Code für d...

Umfassende Zusammenfassung der MySQL-Funktionen

Inhaltsverzeichnis 1. Häufig verwendete Zeichenfo...

Tutorial zum Bereitstellen von nginx+uwsgi in Django-Projekten unter Centos8

1. Virtuelle Umgebung virtualenv installieren 1. ...

Beispiel, wie nginx dynamische und statische Trennung implementiert

Inhaltsverzeichnis Stellen Sie nginx auf Server1 ...

Implementierungsprozess von row_number in MySQL

1. Hintergrund Im Allgemeinen können wir in einer...

Lösung für „Spezialisierter Schlüssel war zu lang“ in MySQL

Inhaltsverzeichnis Lösung 1 Lösung 2 Beim Erstell...

So installieren Sie den RabbitMQ-Server mit Yum auf CentOS

Socat muss vor der Installation von rabbitmq inst...