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 Erläuterung der sieben Wertübertragungsmethoden von Vue

1. Vom Vater zum Sohn Definieren Sie das props Fe...

Optimierung der Frontend-Leistung von Websites: JavaScript und CSS

Ich habe einen Artikel des Yahoo-Teams über die O...

So optimieren Sie MySQL-Gruppen nach Anweisungen

Erstellen Sie in MySQL eine neue Tabelle mit drei...

Lösen Sie das Problem verstümmelter Daten bei der MySQL-Datenbankmigration

Unter den Anweisungen meines Vorgesetzten übernah...

So verbinden Sie Navicat mit der Docker-Datenbank auf dem Server

Starten Sie den MySQL-Container in Docekr Verwend...

Das WeChat-Applet realisiert den Effekt des Siebschüttelns

In diesem Artikel wird der spezifische Code des W...

Zusammenfassung der Linux-Befehlsmethoden zum Anzeigen verwendeter Befehle

Im System werden viele Befehle verwendet. Wie kön...

Einführung in den HTML-Standard für chinesische Zeichenkodierung

In HTML müssen Sie die von der Webseite verwendet...

Lassen Sie uns über die beiden Funktionen von try catch in Javascript sprechen

Das Programm wird sequentiell von oben nach unten...

Kennen Sie die häufigsten MySQL-Designfehler?

Dank der Entwicklung des Internets können wir die...

MySQL Series 6-Benutzer und Autorisierung

Inhaltsverzeichnis Tutorial-Reihe 1. Benutzerverw...

Zwei Möglichkeiten zur Visualisierung von ClickHouse-Daten mit Apache Superset

Apache Superset ist ein leistungsstarkes BI-Tool,...

Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Inhaltsverzeichnis Funktionale Komponenten So sch...