

6 Milyon 300 Bin Kayit Olan Bir Mysql Tablosunda Hız Problemi..
-
merhaba arkadaslar,
6 milyon 3 bin kayit olan bir mysql veri tabanindan tek bir kayit cekiyorum. php ile sorgulayinca sorgu sonucu 10 saniyeden fazla sürüyor... ayni sorguyu phpmyadmin de calistirinca ( Sorgu 0.6183 san.) sürüyor..
sorgum :
SELECT onerilen_doz FROM `hastalik_ilac` WHERE yil="2011" and bitkiid="6" and ilac_id = "6152" and hastalik_id="126" limit 1
tablo yapisi :
1 id int(11) Hayır Yok AUTO_INCREMENT Değiştir Kaldır Daha Fazla
2 yil year(4) Hayır Yok Değiştir Kaldır Daha Fazla
3 ilacgrupid int(11) Hayır Yok Değiştir Kaldır Daha Fazla
4 bitkiid int(11) Hayır Yok Değiştir Kaldır Daha Fazla
5 hastalik_id int(11) Hayır Yok Değiştir Kaldır Daha Fazla
6 ilac_id int(11) Hayır Yok Değiştir Kaldır Daha Fazla
7 onerilen_doz text utf8_turkish_ci Hayır Yok Değiştir Kaldır Daha Fazla
8 has_sure text utf8_turkish_ci Hayır Yok Değiştir Kaldır Daha Fazla
9 aciklama text utf8_turkish_ci Hayır Yok Değiştir Kaldır Daha FazlaPHP KODU:
include_once "config.php";
global $db;
if(isset($_POST['tip']) && $_POST['tip'] == 'firma')
{
$firma = $db->get_row('SELECT ilac_adi,ilacid,aktifmadde,aktifmaddeorani,firma FROM ilaclar WHERE ilacid = "'.$_POST['ilacId'].'"');
$onerilen_doz = $db->get_var('SELECT onerilen_doz FROM `hastalik_ilac` WHERE yil="2011" and bitkiid="'.$_POST["bitki"].'" and ilac_id = "'.$_POST['ilacId'].'" and hastalik_id="'.$_POST["HastalikID"].'" limit 1');
if(!$onerilen_doz){
$firma->doz = 100;
}else{
$firma->doz = $onerilen_doz;
}
die(json_encode($firma));
}
?>bunu nasil hizlandirabilirim? önerisi olan varmi?
-
"Mysql de calistirinca" derken phpmyadmin i mi kastettin yoksa mysql command line mi ?
Bir de o yazdigin sorgunun aynisiyla degistir php icinde olani post dan alma ne kadar surecek
-
phpmyadmin evet. üst konuda soruyu tekrar düzelttim.*
-
POST http://localhost/****/dozver.php 200 OK 700ms // FIREBUG ile debug ettim. WITH(NOLOCK) gibi bi alternatifi warmidir acaba.
-
Where yaptigin sutunlara indexin var mi?
-
ben problemi düzelttim sagolun.. simdi 0.06 ms sürüyor...
-
WH0 bunu yazdı:
-----------------------------
ben problemi düzelttim sagolun.. simdi 0.06 ms sürüyor...
-----------------------------nasıl yaptığını yazsaydın bare hocam
-
Öncelikle veri tabanını hazırlarken optimize olarak ayarlamamışsın.
Yani id dışındaki sayısal değerlere neden int(11) çekiyorsun ki gerek yok. Bunun yerine tinyint() olarak değiştirebilirdin ik yaparken.
Onerilen doz kısmınıda eğer büyük bir veri yoksa neden text yaptın ??? varchar 225 yapsan çok daha ii olurdi tabiki diğer yerlerin
Yine aynı zamanda sql sorgu tipin çok karışık bir çok veri çekmeye çalışıyorsun bundan dolayı karışık tablolamaları ayrı yerde yapsan daha fazla performasn alırdın.
Daha sonra server yada makina seninse SSD hard disk takarsan performans uçar gider.
Tablolamana bakıyorum.
Örnek veriyorum en çok kullanılan ve bir daha tekrarlanmayan bitkiid gibi bir sutun`ü direk, unique gibi performans arttıran özellik ile tanımlamamışsın.
Aynı zamanda unique == Eşsiz veriler varsa
index == sadece 1 yada 0 dönüyorsa bu yapılır.
fulltext == sadece yazı gibi
gibi, bu yukarıdakilar sen veri tabanına bir şey eklediğinde bu özelliklere göre ekler ve performansı yüzde 20 30 arttırır.
mesela san mysql_query(select * from abc where durum1iseengelli='1'); diye arattırğında ve 3 milyon sorgu varsa 6 7 saniye sürer.
ama sen bunu index yapmış olsaydın ortama 2 3 saniyede dönerdi.
bu anlattıklarımı mysql veri tabanı optimizasyonu diye araştırırsan bulabilirsin.
Sana tavsiyem, veri tabanını bir daha bu özelliklere göre oluştur, diğer taraftaki bilgileri buraya aktar.
performansının arttığını göreceksin.
yazım yanlışlarım olabilir. yada eksik bildiğim yerler.
affola, kolay gelsin
-
daha once pek fazla mysql ile ugrasmadigim icin(hatta ilk projem) bayagi sıkıntı idi. google den arastirip cozdum ben olayi. snipeTR bana gerek kalmadan guzelce anlatmis zaten. tesekkurler :)
-
stored procedure kullanırsan oda hızlandıracaktır hocam
-
WH0 bunu yazdı:
-----------------------------daha once pek fazla mysql ile ugrasmadigim icin(hatta ilk projem) bayagi sıkıntı idi. google den arastirip cozdum ben olayi. snipeTR bana gerek kalmadan guzelce anlatmis zaten. tesekkurler :)
-----------------------------Sonradan gelenlere yardımcı olmak amacıyla problemi nasıl aştığını tam olarak belirtirsen sevinirim. Burası forum sonuçta çok yardımcı oluyor çoğu insana.