v2.5.2
Giriş yap

MySQL Like 3 karakterden fazla aratınca aşırı yavaşlama problemi

r00t
486 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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?

Cevap yaz
Cevaplar (6)
r00t
865 gün önce

@qplot, SQL sorgusu içerisinde "WHERE date >= NOW()" benzeri bir sorgum vardı; bunu sorgudan kaldırınca hızlandı neden bilmiyorum. Mecburen kod tarafında tarihi kendim koşullayarak filtreden geçiriyorum şu an.

qplot
865 gün önce

misal blog uyeid ile uye uyeid ilişkili ise bu ıkısınıde fotoğraftakı gıbı ındexle

https://imgyukle.com/i/Vqxp3y

r00t
867 gün önce

@qplot ne demek istediğini anlayamadım, örnek verebilir misin?

qplot
871 gün önce

ilişkili alanları index le sorun çözülür

r00t
871 gün önce

@munzevi teşekkürler detaylı cevabın için. 3 tablonun JOIN olduğu bir sorgum var; İlk 3 karakter için 1 saniye, 4. karakterden sonra birden 20 saniye sürüyor ortalama sonuç almam. Bu garip geliyor.

munzevi
871 gün önce

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