Ich habe die Mysql FIND_IN_SET-Funktion vor einiger Zeit in einem Projekt verwendet und sie kam mir sehr nützlich vor. Nach einer Weile kam der Chef zu mir und sagte, dass dies in IN geändert werden müsse. Haha, er hatte keine andere Wahl, als es zu ändern. Der Grund wird unten analysiert! Erstellen Sie eine Testtabelle, um den Unterschied zwischen den beiden zu erklären. Kopieren Sie einfach die Testdaten in den Q&A-Bereich. Solange sie das Problem veranschaulichen, ist das in Ordnung. Haha, bitte verzeihen Sie mir, wenn es Ihr Urheberrecht verletzt. Es ist das Internet, also müssen wir es teilen! Testcode: CREATE TABLE `test` ( `id` int(8) NICHT NULL auto_increment, `name` varchar(255) NICHT NULL, `Liste` varchar(255) NICHT NULL, PRIMÄRSCHLÜSSEL (`id`) ) INSERT INTO `test` VALUES (1, 'Name', 'daodao, xiaohu, xiaoqin'); INSERT INTO `test` VALUES (2, 'name2', 'xiaohu, daodao, xiaoqin'); INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin, daodao, xiaohu'); test1:sql = Auswahl * aus ‚Test‘, wobei ‚daodao‘ IN (‚Liste‘); Das Ergebnis ist ein Nullwert. test2:sql = Auswahl * aus „Test“, wobei FIND_IN_SET(„daodao“, „Liste“); Holen Sie sich drei Datenstücke. Nehmen wir die obigen Versuchsdaten als Beispiel: Das Ergebnis von Test1 ist leer. Warum? Denn in MySQL handelt es sich um einen Vergleich auf Gleichheit. Hier ist „Liste“ ein Feld in der Tabelle, also eine Variable. Sofern sein Wert nicht genau mit dem Wert von „Name“ übereinstimmt, ist das zurückgegebene Ergebnis leer. Nehmen wir als Beispiel Test1. Das heißt, wenn Sie „daodao“ in „daodao, xiaohu, xiaoqin“ ändern, wird der erste Datensatz abgeglichen. Test2 gibt drei Datenstücke zurück, die möglicherweise das sind, was wir brauchen. Die Funktion FIND_IN_SET in MySQL wird verwendet, um zu vergleichen, ob etwas enthalten ist oder nicht. Sie funktioniert gut, unabhängig davon, ob das Feld „Liste“ eine Variable oder eine gegebene Zeichenfolgenkonstante ist. Der Prototyp in MySQL ist: FIND_IN_SET(str,strlist). Wenn sich der String str in der Stringliste strlist befindet, die aus N Unterketten besteht, liegt der Rückgabewert zwischen 1 und N. Eine Zeichenfolgenliste ist eine Zeichenfolge, die aus durch die Zeichen „,“ getrennten Teilzeichenfolgen besteht. Wenn das erste Argument eine konstante Zeichenfolge und das zweite eine Spalte vom Typ SET ist, ist die Funktion FIND_IN_SET() für die Verwendung der bitweisen Arithmetik optimiert. Wenn str nicht in strlist enthalten ist oder strlist eine leere Zeichenfolge ist, ist der Rückgabewert 0. Wenn ein beliebiger Parameter NULL ist, ist der Rückgabewert NULL. Diese Funktion funktioniert nicht richtig, wenn das erste Argument ein Komma (',') enthält. str kann auch eine Variable sein, beispielsweise ein Feld in einer Tabelle. Dies ist natürlich nicht der Grund, warum wir in unserem Projekt FIND_IN_SET durch IN ersetzen müssen, da beide in unserem Projekt dieselbe Funktion erfüllen können. Es ist nur so, dass IN eine höhere Leistung als FIND_IN_SET hat. Das Feld, das wir abfragen möchten, ist der Primärschlüssel. Bei Verwendung von IN wird der Index verwendet und nur ein Teil der Daten in der Tabelle abgefragt . FIND_IN_SET fragt alle Daten in der Tabelle ab. Da die Datenmenge groß ist, ist die Leistung definitiv nicht hoch und wird daher durch IN ersetzt. Wenn Sie sehen möchten, ob die Abfrage teilweise oder vollständig ist, können Sie EXPLAIN, die Erklärungsfunktion, verwenden. Wenn sie teilweise ist, ist der Typ Bereich, und wenn sie vollständig ist, ist der Typ ALLES. Es gibt auch einen Typ const, der ein konstantes Niveau ist, haha. . . Bewährte Methoden: 1. Wenn die abzufragende Bedingung eine Konstante ist, verwenden Sie IN. Wenn es eine Variable ist, verwenden Sie FIND_IN_SET. Sie können anscheinend den Index verwenden, haha. 2. Wenn sowohl IN als auch FIND_IN_SET die Bedingungen erfüllen können, ist es aus dem gleichen Grund wie oben besser, IN zu verwenden, insbesondere wenn das Abfragefeld der Primärschlüssel ist oder einen Index hat. 3. Wenn die Verwendung von IN die funktionalen Anforderungen nicht erfüllen kann, können Sie nur FIND_IN_SET verwenden. Haha, manchmal kann das Hinzufügen eines %-Zeichens zur IN-Bedingung das Problem auch lösen. Das Hinzufügen eines %-Zeichens zu IN ist nicht nur ein Vergleich auf Gleichheit! Zusammenfassen Dies ist der gesamte Inhalt dieses Artikels zum Unterschied zwischen FIND_IN_SET () und IN in MySQL. Interessierte Freunde können sich auf Folgendes beziehen: Vorsichtsmaßnahmen bei der Partitionierung von MySQL-Datenbanktabellen [empfohlen], mehrere wichtige MySQL-Variablen, Analyse der Ausführungsreihenfolge von SQL- und MySQL-Anweisungen usw. Ich hoffe, es wird für alle hilfreich sein. Jeder ist herzlich eingeladen, eine Nachricht zum Austausch und zur Diskussion zu hinterlassen. Wenn es Mängel gibt, wird der Herausgeber diese rechtzeitig korrigieren und ergänzen. Das könnte Sie auch interessieren:
|
<<: So zeigen Sie verfügbare Netzwerkschnittstellen in Linux an
>>: Vue Virtual DOM – Schnellstart
Wirkung (Quellcode am Ende): erreichen: 1. Tags d...
Dieser Artikel stellt RHEL8-Netzwerkdienste und N...
Da der Einfluss des Unternehmens wächst und seine...
Szenario: Beim Starten von Tomcat in Docker (Vers...
1 Laden Sie das komprimierte Paket der MySQL 5.6-...
2D-Transformationen in CSS ermöglichen es uns, ei...
Bei der Verwendung von Element-UI gibt es eine hä...
Geschäftliche Anforderungen Eines der Projekte, d...
Teil 1 HTML <html> – Start-Tag <Kopf>...
Wie kann die Seiten-Rendering-Zeit im Browser so ...
Flexibles Layout Flex ist die Abkürzung für Flexi...
Inhaltsverzeichnis MySQL-Abfragebaumstruktur 1. Ü...
Tutorial zur MySQL-Installation. Zu Ihrer Informa...
Freunde fragen mich immer, wie man Linux-Prozesse...
Der Datentyp von MySQL ist datetime. Die in der D...