Ürün bilgileri içeren büyük bir tablomuz var. Neredeyse her zaman belirli kelimeleri içeren ürün isimlerini bulmamız gerekiyor, ama maalesef bu sorgular sonsuza dek sürüyor.SQL LIKE sorgu performansının iyileştirilmesi
Örnek: Adın "çelik" ve "102" sözcüklerini içerdiği tüm ürünleri bulun (mutlaka birbirinin yanında değil), "Ninja çelik demir 102 x" gibi bir ürün, tıpkı "Dragon" gibi bir eşleşme çelik 102 b "öyle".
SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%'
(gibi kelimelerin sayısı normalde 2-4, ama teoride 7-8 veya daha fazla olabilir):
Bunu yapmanın daha hızlı bir yolu var mı?
Sadece kelimelerle eşleşiyor, bu yüzden bir şekilde yardımcı olabileceğini merak ediyorum (örneğin yukarıdaki örnekte bulunan ürünler eşleşir, ancak "Samurai swordsteel 102 v", "çelik" tek başına kalmadığından beri eşleşme değildir) .
Kendi düşüncem, ürün adlarındaki kelimelerle bir yardımcı tablo oluşturmak ve sonra eşleşen tabloların kimliklerini almak için bu tabloyu kullanmaktır.
yani bir tablo gibi: [kimlik, kelime, productid] yüzden örneğin olsun:
1, samurai, 3
2, swordsteel, 3
3, 102, 3
4, v, 3
Sadece MySQL bunu yapmanın yolu inşa orada olup olmadığını merak, bu yüzden yok kendi malzememi uygulamak + iki tabloyu korumak.
Teşekkürler!
Teşekkürler. Zaten tam bir metin dizinine sahibiz, ancak çalışmaya devam etmek veya sorgulamak için 5-10 saniye veya daha uzun sürüyor. – Louisa
@Louisa Tam metin dizini kullanmak için LIKE yerine MATCH kullanıyor musunuz? –
İyi bir ipucu, ancak MATCH, SELECT * yaptığımda birçok satıra geri döner. NEREDEN ALINIRSA (NAME) ('+ word1 + word2 + word3' ') - 3 kelimeyle sonuç alırım, ancak sonuçları da sadece 1 Isimde bulunan kelimelerin 2'si. – Louisa