• 23-10-2017, 22:59:12
    #1
    Merhaba JAVA+MySQL(maria db) li bir ön muhasebe yazılımı üzerinde çalışıyorum.stok miktarını aşağıdaki sorgu ile hesaplıyorum ve sorguyu çalıştırdığımda sorgu süresi 8 sn alıyor. acaba sorgu süresini nasıl düşürebilirim.
    SELECT products_id as ID,prod_name,(SELECT IF(type=1 or type=4,sum(urun_adet),0)-IF(type=2 or type=5,sum(urun_adet),0) FROM `ktgcari_000_fatura_xref` where product_id=ktgcari_000_stok.products_id)+IFNULL((SELECT sum(miktar) FROM ktgcari_000_ssayim where urun_id=ktgcari_000_stok.products_id),0) as 'stock' FROM ktgcari_000_stok LIMIT 0,1000
    Stok=(gelen fatura ve irsaliye toplamı)-(giden fatura ve irsaliye toplamı)+(sayım fişi toplamı)
    Veritabanı Bilgileri:
    stok kartı sayısı: 39000
    fatura içeriği tablosu kayıt sayısı: 1800
    sayım fişi sayısı: 942
    veritabanı büyüklüğü: 5 MB
    explain çıktısı
  • 23-10-2017, 23:10:54
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    en sağlıklı yol, toplam sayıları ayrı bir değerde toplama ve değişikliklerde güncellemek olacaktır.
    daha sonra sorgunuzu bu toplam değer üzerinden işleyerek hızı optimize edersiniz.
  • 23-10-2017, 23:19:47
    #3
    dev
    Kurumsal Üye
    sonik509 adlı üyeden alıntı: mesajı görüntüle
    Merhaba JAVA+MySQL(maria db) li bir ön muhasebe yazılımı üzerinde çalışıyorum.stok miktarını aşağıdaki sorgu ile hesaplıyorum ve sorguyu çalıştırdığımda sorgu süresi 8 sn alıyor. acaba sorgu süresini nasıl düşürebilirim.
    SELECT products_id as ID,prod_name,(SELECT IF(type=1 or type=4,sum(urun_adet),0)-IF(type=2 or type=5,sum(urun_adet),0) FROM `ktgcari_000_fatura_xref` where product_id=ktgcari_000_stok.products_id)+IFNULL((SELECT sum(miktar) FROM ktgcari_000_ssayim where urun_id=ktgcari_000_stok.products_id),0) as 'stock' FROM ktgcari_000_stok LIMIT 0,1000
    Stok=(gelen fatura ve irsaliye toplamı)-(giden fatura ve irsaliye toplamı)+(sayım fişi toplamı)
    Veritabanı Bilgileri:
    stok kartı sayısı: 39000
    fatura içeriği tablosu kayıt sayısı: 1800
    sayım fişi sayısı: 942
    veritabanı büyüklüğü: 5 MB
    explain çıktısı
    Index kullanıyor musun tabloda?
  • 23-10-2017, 23:32:04
    #4
    Meftun adlı üyeden alıntı: mesajı görüntüle
    Index kullanıyor musun tabloda?
    ktgcari_000_stok tablosunda products_id(PRIMARY KEY) ve prod_code alanlarında diğer 2 alt sorguda sadece PRIMARY KEY kullanıyorum.
  • 23-10-2017, 23:35:17
    #5
    dev
    Kurumsal Üye
    sonik509 adlı üyeden alıntı: mesajı görüntüle
    ktgcari_000_stok tablosunda products_id(PRIMARY KEY) ve prod_code alanlarında diğer 2 alt sorguda sadece PRIMARY KEY kullanıyorum.
    MySQL Konusunda uzman değilim ama tekrar eden dataların fieldlarını indexlemek çok etki ediyor. Ayrıca bu 8 saniyenin içinde network süreside var mı yoksa sadece sorgunun mysqldeb çıkışı mı 8 saniye?
  • 23-10-2017, 23:39:41
    #6
    Meftun adlı üyeden alıntı: mesajı görüntüle
    MySQL Konusunda uzman değilim ama tekrar eden dataların fieldlarını indexlemek çok etki ediyor. Ayrıca bu 8 saniyenin içinde network süreside var mı yoksa sadece sorgunun mysqldeb çıkışı mı 8 saniye?
    ağ da değil MySQL Server ın kurulu olduğu bilgisayarda test ediyorum. sorgum bir şekilde gereksiz tekrarlara neden oluyor gibi.



    Meftun adlı üyeden alıntı: mesajı görüntüle
    MySQL Konusunda uzman değilim ama tekrar eden dataların fieldlarını indexlemek çok etki ediyor. Ayrıca bu 8 saniyenin içinde network süreside var mı yoksa sadece sorgunun mysqldeb çıkışı mı 8 saniye?
    çok teşekkür ederim. 2 alt sorgumdaki "products_id" alanına index ekledim. sorgu süresi 0.0139 sn ye düştü
  • 25-10-2017, 01:57:26
    #7
    dev
    Kurumsal Üye
    sonik509 adlı üyeden alıntı: mesajı görüntüle
    ağ da değil MySQL Server ın kurulu olduğu bilgisayarda test ediyorum. sorgum bir şekilde gereksiz tekrarlara neden oluyor gibi.




    çok teşekkür ederim. 2 alt sorgumdaki "products_id" alanına index ekledim. sorgu süresi 0.0139 sn ye düştü
    Sorununuzun çözülmesine sevindim. Index dikkatli ve bilinçli kullanılırsa çok güzel sonuçlar veriyor