Wir haben eine große Tabelle mit Produktinformationen. Fast immer müssen wir Produktnamen finden, die bestimmte Wörter enthalten, aber leider dauern diese Abfragen ewig.Verbessern einer SQL LIKE-Abfrage-Leistung
Beispiel: Finden Sie alle Produkte, in denen der Name die Wörter "Stahl" und "102" enthält (nicht notwendigerweise nebeneinander, so ein Produkt wie "Ninja Stahl Eisen 102 x" ist eine Übereinstimmung, genau wie "Dragon Stahl 102 b "ist es).
Zur Zeit machen wir es so:
SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%'
(die Anzahl der Wörter wie normalerweise 2-4 sind, aber es kann 7-8 oder mehr in der Theorie).
Gibt es eine schnellere Möglichkeit, dies zu tun?
Wir sind nur passende Wörter, also frage ich mich, ob das irgendwie helfen kann (dh die Produkte im obigen Beispiel sind Übereinstimmungen, aber "Samurai swordsteel 102 v" ist keine Übereinstimmung, da "Stahl" nicht alleine steht) .
Mein eigener Gedanke ist, eine Hilfstabelle mit den Wörtern aus Produktnamen in und dann verwenden Sie diese Tabelle, um die IDs der passenden Produkte zu erhalten.
dh eine Tabelle wie: [id, ein Wort, productid], so erhalten wir zum Beispiel:
1, samurai, 3
2, swordsteel, 3
3, 102, 3
4, v, 3
Frage mich nur, wenn es eine in Art und Weise aufgebaut ist dies in MySQL zu tun, also habe ich nicht um meine eigenen Sachen zu implementieren + zwei Tabellen zu verwalten.
Danke!
Danke. Wir haben bereits einen Volltextindex, aber es dauert immer noch 5-10 Sekunden oder länger, um zu laufen oder Fragen zu stellen. – Louisa
@Louisa Verwenden Sie MATCH anstelle von LIKE, um den Volltextindex zu verwenden? –
Gute Tipp, aber MATCH kehrt zu vielen Zeilen zurück, wenn ich SELECT * FROM Produkte WHERE MATCH (NAME) GEGEN ('+ Wort1 + Wort2 + Wort3' ') - Ich bekomme Ergebnisse mit allen 3 Wörtern in, sondern auch Ergebnisse mit nur 1 -2 der Wörter im Namen. – Louisa