MySQL Like 3 karakterden fazla aratınca aşırı yavaşlama problemi
Merhabalar;
Select * From tablo WHERE username LIKE "%abcdefgh%"
şeklindeki sorguda; yüzdeler arasına 3 karaktere kadar yazıp aratınca saniye içerisinde arama sonuçları çıkarken; 4. ve sonraki uzunluklarda ciddi bir yavaşlık oluyor.
Input üstünde ajax ile keyup durumuna göre ajax ile istek atıyorum; ilk 3 tuşta anında autocomplete cevabı alabiliyorken; 4. karakterden sonra çok ciddi süreler bekletiyor.
Kodsal bir durum mu diye, MysqlWorkbench üstünden SQL sorgusu yapıp karşılaştırdığımda benzer sonuç ile karşılaştım.
Mysql tarafında da SQL sorgusuna 4. karakterden sonra arama yapmaya çalışınca çok uzun süre bekletiyor.
Önerileriniz nedir, performans sorununu nasıl çözerim?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
misal blog uyeid ile uye uyeid ilişkili ise bu ıkısınıde fotoğraftakı gıbı ındexle
sorgunun yavaşlama nedeni tüm kolonlarda arama yapıyor olman. örneğin kullanıcının eposta adresini arıyorsun ve bunu kullanıdı adına göre yapıyorsun, kodun şöyle olmalıdır;
SELECT email FROM tablo WHERE username LIKE "%value%"
birden fazla kolon için virgülle kullanacağın verileri çoğaltabilirsin
SELECT email, image, birthday FROM tablo WHERE username LIKE "%value%"
hiçbir sorgunda * işareti kullanmamanı şiddetle tavsiye ederim.
edit: ayrıca başlayan veya biten ifadeleri ile arama yapman daha hızlı sonuçlar döndürecektir.
bu başlayan araması örneği
SELECT email FROM tablo WHERE username LIKE "%r00t"
bu da biten
SELECT email FROM tablo WHERE username LIKE "r00t%"