folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder SQL Sorgu Performans Sorunu



SQL Sorgu Performans Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    lazz
    lazz's avatar
    Kayıt Tarihi: 15/Ekim/2007
    Erkek
    SELECT     
       (SELECT TOP (1) sBarkod FROM dbo.tbStokBarkodu WHERE nStokID = dbo.tbStok.nStokID) AS sBarkod
      ,(SELECT TOP (1) sBarkod FROM dbo.tbStokBarkodu WHERE nStokID = dbo.tbStok.nStokID AND nFirmaID <> '0') AS sFirmaBarkod
      , dbo.tbStok.sAciklama
      , sFiy1.lFiyat AS TA
      , sFiy2.lFiyat AS ISF
      , sFiy3.lFiyat AS PSF
      , sFiy4.lFiyat AS TAI
      ,dbo.tbStok.sKodu
      ,dbo.tbKdv.nKdvOrani
      ,dbo.tbStok.sModel
      ,dbo.tbRenk.sRenkAdi
      ,dbo.tbStok.sBeden
      ,dbo.tbStok.nStokID
      ,dbo.tbStokSinifi.sSinifKodu14
      FROM 
      dbo.tbStokSinifi RIGHT OUTER JOIN
                          dbo.tbStok ON dbo.tbStokSinifi.nStokID = dbo.tbStok.nStokID RIGHT OUTER JOIN
                          dbo.tbStokBarkodu AS tbStokBarkodu_1 ON dbo.tbStok.nStokID = tbStokBarkodu_1.nStokID LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy1 ON dbo.tbStok.nStokID = sFiy1.nStokID AND sFiy1.sFiyatTipi = 'TA' LEFT OUTER JOIN
                          dbo.tbRenk ON dbo.tbStok.sRenk = dbo.tbRenk.sRenk LEFT OUTER JOIN
                          dbo.tbKdv ON dbo.tbStok.sKdvTipi = dbo.tbKdv.sKdvTipi LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy2 ON dbo.tbStok.nStokID = sFiy2.nStokID AND sFiy2.sFiyatTipi = 'ISF' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy4 ON dbo.tbStok.nStokID = sFiy4.nStokID AND sFiy4.sFiyatTipi = 'TAI' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy3 ON dbo.tbStok.nStokID = sFiy3.nStokID AND sFiy3.sFiyatTipi = 'PSF'
    GROUP BY dbo.tbStok.sKodu, dbo.tbStok.nStokID, dbo.tbStok.sAciklama, dbo.tbStok.sBeden, dbo.tbRenk.sRenkAdi, sFiy1.sFiyatTipi, sFiy2.sFiyatTipi, sFiy3.sFiyatTipi, 
                          sFiy4.sFiyatTipi, sFiy1.lFiyat, sFiy2.lFiyat, sFiy3.lFiyat, sFiy4.lFiyat, dbo.tbKdv.nKdvOrani, dbo.tbStok.sModel, dbo.tbStokSinifi.sSinifKodu14

     

    Böyle bir sorgum var bu sorgunun tamamnlanması yaklasık 47 sn suruyor.

    sorgu performans araclarında 47 saniyeyi alt sorgularımın biri %33 diğeri %31  alıyor bu alt sorguları daha farklı calıstırmak ıcın bır yol varmı acaba 

     

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dhmm
    dhmm's avatar
    Kayıt Tarihi: 15/Eylül/2011
    Erkek
    lazz bunu yazdı
    SELECT     
       (SELECT TOP (1) sBarkod FROM dbo.tbStokBarkodu WHERE nStokID = dbo.tbStok.nStokID) AS sBarkod
      ,(SELECT TOP (1) sBarkod FROM dbo.tbStokBarkodu WHERE nStokID = dbo.tbStok.nStokID AND nFirmaID <> '0') AS sFirmaBarkod
      , dbo.tbStok.sAciklama
      , sFiy1.lFiyat AS TA
      , sFiy2.lFiyat AS ISF
      , sFiy3.lFiyat AS PSF
      , sFiy4.lFiyat AS TAI
      ,dbo.tbStok.sKodu
      ,dbo.tbKdv.nKdvOrani
      ,dbo.tbStok.sModel
      ,dbo.tbRenk.sRenkAdi
      ,dbo.tbStok.sBeden
      ,dbo.tbStok.nStokID
      ,dbo.tbStokSinifi.sSinifKodu14
      FROM 
      dbo.tbStokSinifi RIGHT OUTER JOIN
                          dbo.tbStok ON dbo.tbStokSinifi.nStokID = dbo.tbStok.nStokID RIGHT OUTER JOIN
                          dbo.tbStokBarkodu AS tbStokBarkodu_1 ON dbo.tbStok.nStokID = tbStokBarkodu_1.nStokID LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy1 ON dbo.tbStok.nStokID = sFiy1.nStokID AND sFiy1.sFiyatTipi = 'TA' LEFT OUTER JOIN
                          dbo.tbRenk ON dbo.tbStok.sRenk = dbo.tbRenk.sRenk LEFT OUTER JOIN
                          dbo.tbKdv ON dbo.tbStok.sKdvTipi = dbo.tbKdv.sKdvTipi LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy2 ON dbo.tbStok.nStokID = sFiy2.nStokID AND sFiy2.sFiyatTipi = 'ISF' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy4 ON dbo.tbStok.nStokID = sFiy4.nStokID AND sFiy4.sFiyatTipi = 'TAI' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy3 ON dbo.tbStok.nStokID = sFiy3.nStokID AND sFiy3.sFiyatTipi = 'PSF'
    GROUP BY dbo.tbStok.sKodu, dbo.tbStok.nStokID, dbo.tbStok.sAciklama, dbo.tbStok.sBeden, dbo.tbRenk.sRenkAdi, sFiy1.sFiyatTipi, sFiy2.sFiyatTipi, sFiy3.sFiyatTipi, 
                          sFiy4.sFiyatTipi, sFiy1.lFiyat, sFiy2.lFiyat, sFiy3.lFiyat, sFiy4.lFiyat, dbo.tbKdv.nKdvOrani, dbo.tbStok.sModel, dbo.tbStokSinifi.sSinifKodu14

     

    Böyle bir sorgum var bu sorgunun tamamnlanması yaklasık 47 sn suruyor.

    sorgu performans araclarında 47 saniyeyi alt sorgularımın biri %33 diğeri %31  alıyor bu alt sorguları daha farklı calıstırmak ıcın bır yol varmı acaba 

     

     

    Hocam outer join satirlari kaldirmadan ilerler diye biliyorum.

     

    Inner join sadece iki tablodan istenileni alir

    full outer join iki tablodan verileri alir ve eslesmeyen satirlari null gosterir

    left outer join full ile ayni olup sadece sag taraftaki tablonun soldakiyel eslesen kisimlarini alir. Eslesmeyenere null degeri koyar

    Birde cross join var ki hepsini hepsiyle eslestiriyor.

     

    OUTER JOIN yerine inner join kullanabilir misin bir bak.

    Ayrica alt sorgu yerine funksiyon veya stored procedure yazabirlisin.

     


    Ozgurluk aslinda her istedigini yapabilmek degildir, istemedigini yapmamaktir. // Verdigin degeri gormeyince, gordugun degeri ver !!! // Hayatin herkes icin bir bavulu vardir !!! // Dusmek gerekir bazen hayatta; kalkmayi ogrenebilmek icin
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    lazz
    lazz's avatar
    Kayıt Tarihi: 15/Ekim/2007
    Erkek

    okadar ıyı degılım ama ogrenebılırım 

    Ayrica alt sorgu yerine funksiyon veya stored procedure yazabirlisin.

     

    bu deıdıgını nasıl yapabılırım vb nettekine benzıyenn bır seydır herhalde

     

     

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    profil resmini begenmedim :)

     

    sorgunun uzun sürmesinin muhtemel nedeni yaptigin gruplama.. bunu yazilim tarafinda da yapabilirsin (eger varsa). 

    Ayrica iki konu hakkinda arastirma yaparsan bir cok sey ogrenebilirsin. Database Normalization ve Database Index. Maalesef bu konular gözden kaciliyor. Oysa cok onemli konular..

     

    Ikinci tavsiyem, kodunu yavas yavas kirp ve performanslarini ölc, boylece yük getiren kismi tam olarak bulursun ve ona göre de sorgunu tekrar yazarsin

     

    unbalanced tarafından 23/Haz/17 13:32 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    lazz
    lazz's avatar
    Kayıt Tarihi: 15/Ekim/2007
    Erkek
    unbalanced bunu yazdı

    profil resmini begenmedim :)

     

    sorgunun uzun sürmesinin muhtemel nedeni yaptigin gruplama.. bu yazilim tarafinda da yapabilirsin. 

    Ayrica iki konu hakkinda arastirma yaparsan bir cok sey ogrenebilirsin. Database Normalization ve Database Index. Maalesef bu konular gözden kaciliyor. Oysa cok onemli konular..

     

    Ikinci tavsiyem, kodunu yavas yavas kirp ve performanslarini ölc, boylece yük getiren kismi tam olarak bulursun ve ona göre de sorgunu tekrar yazarsin

    hocam profıl ruh halımı yansıtyor

    test ettiğimde 47 sn zaten %60 dan fazlasını ıkı alt sorgum harcıyor.

    şimdi fonksıyon olusturdum ama kullanmayı bulamadım

    SELECT     
       (SELECT * FROM dbo.sBarkodBull(dbo.tbStok.nStokID)) AS sBarkod
      ,(SELECT TOP (1) sBarkod FROM dbo.tbStokBarkodu WHERE nStokID = dbo.tbStok.nStokID AND nFirmaID <> '0') AS sFirmaBarkod
      , dbo.tbStok.sAciklama, sFiy1.lFiyat AS TA
      , sFiy2.lFiyat AS ISF
      , sFiy3.lFiyat AS PSF
      , sFiy4.lFiyat AS TAI
      ,dbo.tbStok.sKodu
      ,dbo.tbKdv.nKdvOrani
      ,dbo.tbStok.sModel
      ,dbo.tbRenk.sRenkAdi
      ,dbo.tbStok.sBeden
      ,dbo.tbStok.nStokID
      ,dbo.tbStokSinifi.sSinifKodu14
      FROM 
      dbo.tbStokSinifi RIGHT OUTER JOIN
                          dbo.tbStok ON dbo.tbStokSinifi.nStokID = dbo.tbStok.nStokID RIGHT OUTER JOIN
                          dbo.tbStokBarkodu AS tbStokBarkodu_1 ON dbo.tbStok.nStokID = tbStokBarkodu_1.nStokID LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy1 ON dbo.tbStok.nStokID = sFiy1.nStokID AND sFiy1.sFiyatTipi = 'TA' LEFT OUTER JOIN
                          dbo.tbRenk ON dbo.tbStok.sRenk = dbo.tbRenk.sRenk LEFT OUTER JOIN
                          dbo.tbKdv ON dbo.tbStok.sKdvTipi = dbo.tbKdv.sKdvTipi LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy2 ON dbo.tbStok.nStokID = sFiy2.nStokID AND sFiy2.sFiyatTipi = 'ISF' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy4 ON dbo.tbStok.nStokID = sFiy4.nStokID AND sFiy4.sFiyatTipi = 'TAI' LEFT OUTER JOIN
                          dbo.tbStokFiyati AS sFiy3 ON dbo.tbStok.nStokID = sFiy3.nStokID AND sFiy3.sFiyatTipi = 'PSF'
    GROUP BY dbo.tbStok.sKodu, dbo.tbStok.nStokID, dbo.tbStok.sAciklama, dbo.tbStok.sBeden, dbo.tbRenk.sRenkAdi, sFiy1.sFiyatTipi, sFiy2.sFiyatTipi, sFiy3.sFiyatTipi, 
                          sFiy4.sFiyatTipi, sFiy1.lFiyat, sFiy2.lFiyat, sFiy3.lFiyat, sFiy4.lFiyat, dbo.tbKdv.nKdvOrani, dbo.tbStok.sModel, dbo.tbStokSinifi.sSinifKodu14

    usttekı alt sorguyu değiştim ama çalıştıramadım

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    fonsiyonun ne getirecegini bilmiyorum ama su sekil cagirabilirsin

     

    select dbo.fonksiyonun('varsa_parametren') 

    bunu cagirinca donen sonucu gorursun...

     

    Ayrica dedigim gibi Indexleme olayina bakarsan performansin artar. DB yi yormamak adina da bir yazilim dili kullaniyorsan her seyi SQL serverdan beklememek gerek.

    Kolay gelsin


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    lazz
    lazz's avatar
    Kayıt Tarihi: 15/Ekim/2007
    Erkek

    indexleme yapılıp yapılmadıgını nasıl kontrol edebılırım birde

    bu sekılde yazınca foksıyounu bulamıyo acaba atladıgım bırseymı var

     

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    lazz bunu yazdı

    indexleme yapılıp yapılmadıgını nasıl kontrol edebılırım birde

    bu sekılde yazınca foksıyounu bulamıyo acaba atladıgım bırseymı var

     

    https://www.youtube.com/watch?v=rreKY6K3S_A Burada iyi bir şekilde anlatılıyor hocam. Ek olarak sanırım joinler ile sadece tek bir parametre çekiyorsun. Join yaparak tüm parametreleri ele alıyorsun. LeftJoin veya Right join'i yukarıda dhmm anlatmış zaten onlarla fazladan işleme sokuyorsun sorguyu . Indexleme olayı da veritabanını çok iyileştiriyor birebir şahit oldum. heleki LIKE Sorguları varsa .........

     

    MhmdAlmz tarafından 23/Haz/17 15:47 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dhmm
    dhmm's avatar
    Kayıt Tarihi: 15/Eylül/2011
    Erkek
    MhmdAlmz bunu yazdı
     

    Ek olarak sanırım joinler ile sadece tek bir parametre çekiyorsun. Join yaparak tüm parametreleri ele alıyorsun. LeftJoin veya Right join'i yukarıda dhdmm anlatmış zaten onlarla fazladan işleme sokuyorsun sorguyu . Indexleme olayı da veritabanını çok iyileştiriyor birebir şahit oldum. heleki LIKE Sorguları varsa .........

    Cok rica edecegim dhmm yazalim :). Saka bir yana FB tan email, pm  vs bana bi ulasirmisin.


    Ozgurluk aslinda her istedigini yapabilmek degildir, istemedigini yapmamaktir. // Verdigin degeri gormeyince, gordugun degeri ver !!! // Hayatin herkes icin bir bavulu vardir !!! // Dusmek gerekir bazen hayatta; kalkmayi ogrenebilmek icin
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    lazz bunu yazdı

    indexleme yapılıp yapılmadıgını nasıl kontrol edebılırım birde

    bu sekılde yazınca foksıyounu bulamıyo acaba atladıgım bırseymı var

     

    hocam bu konularla ilgili videolar vs izlersen daha faydali olur. Hem daha iyi ögrenmis olursun ve ilerde sorun yasamazsin. Iki dakikayla anlatilacak seyler yok. Iyi ve performansli bir veritabani hazirlamak icin veritabani uzmanlari var ve cidden cok buyuk isler bunlar. Ben ileri seviye veritabani dersleri aldim ancak bilgim yine de cok kisitli, bu da baska bir derya deniz misali. O yüzden veritabani performansi ile ilgili videolar üzerinden gidersen senin acindan daha iyi olur. Ben senin tablo yapilarini vs bilmedigim icin su kodu al bu performanslidir diyemiyorum. 

    Ancak merak ediyorsan Sql plan query cost diye aratirsan, sorgularin getirecegi yükleri bulabilirsin ve yeniden yazarak düzeltebilirsin. ama dedigim gibi benim bunu burada iki dakika da anlatmam mümkün degil. Bunla ilgili kitaplar mevcut.

    kolay gelsin


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 2358 Toplam Mesaj: 10
mssql mssql performans mssql sorgu performansı