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. 

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 |
| | 
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

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.

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
---|