• 11-12-2015, 18:07:23
    #1
    Merhabalar asp ile kodladığım (veritabanı mysql) sitemde 300 bine yakın veri var, sorgu yapılan hücrelerde index kullandım, index kullanınca eskisine göre hızlandı, fakat hala çok yavaş çalışıyor sitem. Firmaları listeletirken 10-15 saniyeden önce listeleme yapmıyor maalsef, bir sunucuda sadece bu siteyi çalıştırıyorum ama çok yavaş, sunucu gayet kaliteli 32 ramli bir sunucu, yaklaşık 1 yıldır bu sorunu çözemedim, yardımlarını bekliyorum.
  • 11-12-2015, 18:09:56
    #2
    aslında kodlamada ve döngülerde hersey..
    döngülerinizi değiştirin öyle deneyin bence
  • 11-12-2015, 18:28:08
    #3
    rnmks adlı üyeden alıntı: mesajı görüntüle
    aslında kodlamada ve döngülerde hersey..
    döngülerinizi değiştirin öyle deneyin bence
    teşekkür ederim cevabınız için, döngümü aşağıdan inceleyebilirsiniz.

    <%set firmalar=connect.execute("select icerik_id,image,adi,telefon,websayfa,sektorler_icerik_id,sektorleralt_icerik_id,sehir_icerik_id,ilce_icerik_id,vitrin from firmalar where vitrin=1 order by icerik_id desc limit 30")
    do while not firmalar.eof%>
    <div id="Firmalar">
    <div id="Resim"><a href="/firmalar/<%=firmalar("icerik_id")%>/<%=cevir(firmalar("adi"))%>" title="<%=firmalar("adi")%>"><%if firmalar("image")="" then%><img src="/images/firmalarresmiyok.jpg" alt="<%=firmalar("adi")%>"/><%else%><img src="/upload/<%=firmalar("image")%>" alt="<%=firmalar("adi")%>"/><%end if%></a></div>
    <div id="Adi"><a href="/firmalar/<%=firmalar("icerik_id")%>/<%=cevir(firmalar("adi"))%>" title="<%=firmalar("adi")%>"><%=firmalar("adi")%></a></div>
    <%set sehir=connect.execute("select * from sehirler where icerik_id='"&firmalar("sehir_icerik_id")&"'")%>
    <%set ilce=connect.execute("select * from ilceler where icerik_id='"&firmalar("ilce_icerik_id")&"'")%>
    <div id="Adres"><a href="/sehirler/<%=sehir("icerik_id")%>/<%=cevir(sehir("sehirismi"))%>" title="<%=sehir("sehirismi")%>"><%=sehir("sehirismi")%></a> / <a href="/ilceler/<%=ilce("icerik_id")%>/<%=cevir(ilce("ilceismi"))%>" title="<%=ilce("ilceismi")%>"><%=ilce("ilceismi")%></a></div>
    <div id="Telefon"><%=firmalar("telefon")%><%if not firmalar("websayfa")="" then%> - <a href="http://<%=httpsil(firmalar("websayfa"))%>" target="_blank"><%=websayfatemizle(firmalar("websayfa"))%></a><%end if%></div>
    <%set sektorler=connect.execute("select * from sektorler where icerik_id='"&firmalar("sektorler_icerik_id")&"'")%>
    <%set sektorleralt=connect.execute("select * from altsektorler where icerik_id='"&firmalar("sektorleralt_icerik_id")&"'")%>
    <%if not sektorler.eof then%>
    <div id="Sektor"><a href="/sektorler/<%=sektorler("icerik_id")%>/<%=cevir(sektorler("sektorleradi"))%>" title="<%=sektorler("sektorleradi")%>"><%=sektorler("sektorleradi")%></a> 
    <%if not sektorleralt.eof then%>
    / <a href="/altsektorler/<%=sektorleralt("icerik_id")%>/<%=cevir(sektorleralt("sektorleradi"))%>" title="<%=sektorleralt("sektorleradi")%>"><%=sektorleralt("sektorleradi")%></a>
    <%end if%>
    </div>
    <%end if%>
    </div>
    <%firmalar.movenext:loop%>
  • 11-12-2015, 19:22:12
    #4
    aslında şöyle söyliyeceğim size dondulerde bağlantılarda aslında sıkıntı yok.
    benim tecrübem en fazla 120k veri vardı. kasma olduktan sonra döngüleri değiştirdim kasma yasamadım.

    Fakat 5 farklı tabloya bağlanmaya çalıştığını içinde olabilir.
    Tek tablo üzerinden yürütseydiniz sıkıntı olucağını sanmıyorum.
    ama bu saatten sonra ne yapılır fazla bişey diyemem.

    Mssql + asp gercekten daha sağlıklı oluyor. aklınızda bulunsun
  • 11-12-2015, 20:02:21
    #5
    İyi güzel diyorsunuzda, farklı tablo olunca daha hızlı çalışacağını düşünüyorum, çünkü tablonun veri boyutu böylece düşecektir.
  • 11-12-2015, 20:34:19
    #6
    sahin1453 adlı üyeden alıntı: mesajı görüntüle
    İyi güzel diyorsunuzda, farklı tablo olunca daha hızlı çalışacağını düşünüyorum, çünkü tablonun veri boyutu böylece düşecektir.
    Kısmen yanlış düşünüyorsunuz. Döngünün her bir turunda dört sorgu daha çalıştırarak performans kazandıramazsınız. Verileri mümkün olduğunca tek bağlantıda çekmek daha faydalıdır.

    Mevcut yapınızda bu sorunun üstesinden gelmek için JOIN kullanabilirsiniz.

    SELECT
    	FIR.icerik_id,FIR.image,
    	FIR.adi,FIR.telefon,
    	FIR.websayfa,FIR.vitrin,
    	SEH.icerik_id SEHIRID,SEH.sehirismi,
    	ILC.icerik_id ILCEID,ILC.ilceismi,
    	SEK.icerik_id SEKTORID,SEK.sektorleradi,
    	ASEK.icerik_id ALTSEKTORID,ASEK.sektorleradi
    FROM FIRMALAR FIR
    LEFT JOIN SEHIRLER SEH
    	ON FIR.sehir_icerik_id = SEH.icerik_id
    LEFT JOIN ILCELER ILC
    	ON FIR.ilce_icerik_id = ILC.icerik_id
    LEFT JOIN SEKTORLER SEK
    	ON FIR.sektorler_icerik_id = SEK.icerik_id
    LEFT JOIN ALTSEKTORLER ASEK
    	ON FIR.sektorleralt_icerik_id = ASEK.icerik_id
    Döngünün içindeki tüm sorguları iptal edip, yukarıdaki sorguyu "firmalar" kayıtsetine kopyalayın. HTML içinde kullandığınız alanları da firmalar("sütun") şeklinde güncelleyin. Faydası olacağını düşünüyorum.

    Bu düzenlemeye ek olarak; "cevir" ve "websayfatemizle" gibi fonksiyonlar da kullanmışsınız. İşlerini ne şekilde yürüttüklerini bilmediğim için yorum yapamıyorum ancak onları da gözden geçirmenizde fayda olabilir.

    İPUCU:
    "cevir" fonksiyonu ile URL'ler üretiyorsunuz anladığım kadarıyla. Her sorgulamada ve bu sorguların döngülerinde sonuçları bu fonksiyona sokup, IIS'e ek yük bindirmek yerine, "firmalar" tablosunda çevrilmiş hâlinin saklanacağı bir sütun açıp, yalnızca INSERT edilirken bu fonksiyonu kullanmanız performans için daha doğru olacaktır.

    Neticede SELECT sorguları genelde ezici bir farkla INSERT işlemlerinden çok daha sık kullanılıyor.

    Alıntı yaptığım cevabınız için de açıklamam yukarıdaki ipucunda yer alıyor. Sütun sayısı arttı ama performans kaybı oldukça azaldı (deneyince fark edeceksiniz).
  • 11-12-2015, 21:01:28
    #7
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Kısmen yanlış düşünüyorsunuz. Döngünün her bir turunda dört sorgu daha çalıştırarak performans kazandıramazsınız. Verileri mümkün olduğunca tek bağlantıda çekmek daha faydalıdır.

    Mevcut yapınızda bu sorunun üstesinden gelmek için JOIN kullanabilirsiniz.

    SELECT
    	FIR.icerik_id,FIR.image,
    	FIR.adi,FIR.telefon,
    	FIR.websayfa,FIR.vitrin,
    	SEH.icerik_id SEHIRID,SEH.sehirismi,
    	ILC.icerik_id ILCEID,ILC.ilceismi,
    	SEK.icerik_id SEKTORID,SEK.sektorleradi,
    	ASEK.icerik_id ALTSEKTORID,ASEK.sektorleradi
    FROM FIRMALAR FIR
    LEFT JOIN SEHIRLER SEH
    	ON FIR.sehir_icerik_id = SEH.icerik_id
    LEFT JOIN ILCELER ILC
    	ON FIR.ilce_icerik_id = ILC.icerik_id
    LEFT JOIN SEKTORLER SEK
    	ON FIR.sektorler_icerik_id = SEK.icerik_id
    LEFT JOIN ALTSEKTORLER ASEK
    	ON FIR.sektorleralt_icerik_id = ASEK.icerik_id
    Döngünün içindeki tüm sorguları iptal edip, yukarıdaki sorguyu "firmalar" kayıtsetine kopyalayın. HTML içinde kullandığınız alanları da firmalar("sütun") şeklinde güncelleyin. Faydası olacağını düşünüyorum.

    Bu düzenlemeye ek olarak; "cevir" ve "websayfatemizle" gibi fonksiyonlar da kullanmışsınız. İşlerini ne şekilde yürüttüklerini bilmediğim için yorum yapamıyorum ancak onları da gözden geçirmenizde fayda olabilir.

    İPUCU:
    "cevir" fonksiyonu ile URL'ler üretiyorsunuz anladığım kadarıyla. Her sorgulamada ve bu sorguların döngülerinde sonuçları bu fonksiyona sokup, IIS'e ek yük bindirmek yerine, "firmalar" tablosunda çevrilmiş hâlinin saklanacağı bir sütun açıp, yalnızca INSERT edilirken bu fonksiyonu kullanmanız performans için daha doğru olacaktır.

    Neticede SELECT sorguları genelde ezici bir farkla INSERT işlemlerinden çok daha sık kullanılıyor.

    Alıntı yaptığım cevabınız için de açıklamam yukarıdaki ipucunda yer alıyor. Sütun sayısı arttı ama performans kaybı oldukça azaldı (deneyince fark edeceksiniz).
    merhaba hocam cevabınız için teşekkür ederim, yalnız ben altta html çıktı verecek kısımda verileri ne şekilde yazdıracağımı anlamadım, mesela firma için firmalar("id") yapıyordum, sektörler için ise sektorler("id") yapıyordum, şimdi nasıl yazdıracağım anlayamadım tam olarak
  • 11-12-2015, 21:09:28
    #8
    sahin1453 adlı üyeden alıntı: mesajı görüntüle
    merhaba hocam cevabınız için teşekkür ederim, yalnız ben altta html çıktı verecek kısımda verileri ne şekilde yazdıracağımı anlamadım, mesela firma için firmalar("id") yapıyordum, sektörler için ise sektorler("id") yapıyordum, şimdi nasıl yazdıracağım anlayamadım tam olarak
    Firmanın ID'si için => firmalar("icerik_id")
    Sektör ID'si için => firmalar("SEKTORID")

    Kendinden önceki sütun adını ezmesin diye, aynı adda olan sütunlar için yeniden isimlendirme yaptım.

    "SEK.icerik_id SEKTORID" diyerek, sektörün ID'sini SEKTORID adıyla ver diyoruz.

    SQL'de bir sütunu yeniden isimlendirmek için AS ifadesini kullanabilirsiniz.

    "SELECT ID FROM FIRMALAR" => firmalar("ID")
    "SELECT ID AS FIRMAID FROM FIRMALAR" => firmalar("FIRMAID")
    "SELECT ID FIRMAID FROM FIRMALAR" => firmalar("FIRMAID")

    İkinci ve üçüncü ifade birbirinden farksızdır. AS ifadesi olmadan da sütunları adlandırabilirsiniz. Aynı işlem tablo adları için de geçerlidir.

    Örnek: "SELECT ID FIRMAID FROM FIRMALAR FIRMALARTABLOM"
  • 11-12-2015, 22:11:45
    #9
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Kısmen yanlış düşünüyorsunuz. Döngünün her bir turunda dört sorgu daha çalıştırarak performans kazandıramazsınız. Verileri mümkün olduğunca tek bağlantıda çekmek daha faydalıdır.

    Mevcut yapınızda bu sorunun üstesinden gelmek için JOIN kullanabilirsiniz.

    SELECT
    	FIR.icerik_id,FIR.image,
    	FIR.adi,FIR.telefon,
    	FIR.websayfa,FIR.vitrin,
    	SEH.icerik_id SEHIRID,SEH.sehirismi,
    	ILC.icerik_id ILCEID,ILC.ilceismi,
    	SEK.icerik_id SEKTORID,SEK.sektorleradi,
    	ASEK.icerik_id ALTSEKTORID,ASEK.sektorleradi
    FROM FIRMALAR FIR
    LEFT JOIN SEHIRLER SEH
    	ON FIR.sehir_icerik_id = SEH.icerik_id
    LEFT JOIN ILCELER ILC
    	ON FIR.ilce_icerik_id = ILC.icerik_id
    LEFT JOIN SEKTORLER SEK
    	ON FIR.sektorler_icerik_id = SEK.icerik_id
    LEFT JOIN ALTSEKTORLER ASEK
    	ON FIR.sektorleralt_icerik_id = ASEK.icerik_id
    Döngünün içindeki tüm sorguları iptal edip, yukarıdaki sorguyu "firmalar" kayıtsetine kopyalayın. HTML içinde kullandığınız alanları da firmalar("sütun") şeklinde güncelleyin. Faydası olacağını düşünüyorum.

    Bu düzenlemeye ek olarak; "cevir" ve "websayfatemizle" gibi fonksiyonlar da kullanmışsınız. İşlerini ne şekilde yürüttüklerini bilmediğim için yorum yapamıyorum ancak onları da gözden geçirmenizde fayda olabilir.

    İPUCU:
    "cevir" fonksiyonu ile URL'ler üretiyorsunuz anladığım kadarıyla. Her sorgulamada ve bu sorguların döngülerinde sonuçları bu fonksiyona sokup, IIS'e ek yük bindirmek yerine, "firmalar" tablosunda çevrilmiş hâlinin saklanacağı bir sütun açıp, yalnızca INSERT edilirken bu fonksiyonu kullanmanız performans için daha doğru olacaktır.

    Neticede SELECT sorguları genelde ezici bir farkla INSERT işlemlerinden çok daha sık kullanılıyor.

    Alıntı yaptığım cevabınız için de açıklamam yukarıdaki ipucunda yer alıyor. Sütun sayısı arttı ama performans kaybı oldukça azaldı (deneyince fark edeceksiniz).
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Firmanın ID'si için => firmalar("icerik_id")
    Sektör ID'si için => firmalar("SEKTORID")

    Kendinden önceki sütun adını ezmesin diye, aynı adda olan sütunlar için yeniden isimlendirme yaptım.

    "SEK.icerik_id SEKTORID" diyerek, sektörün ID'sini SEKTORID adıyla ver diyoruz.

    SQL'de bir sütunu yeniden isimlendirmek için AS ifadesini kullanabilirsiniz.

    "SELECT ID FROM FIRMALAR" => firmalar("ID")
    "SELECT ID AS FIRMAID FROM FIRMALAR" => firmalar("FIRMAID")
    "SELECT ID FIRMAID FROM FIRMALAR" => firmalar("FIRMAID")

    İkinci ve üçüncü ifade birbirinden farksızdır. AS ifadesi olmadan da sütunları adlandırabilirsiniz. Aynı işlem tablo adları için de geçerlidir.

    Örnek: "SELECT ID FIRMAID FROM FIRMALAR FIRMALARTABLOM"
    hocam veritabanı programında query olarak test ettim kodlar çalıştı, fakat asp kodun içine ekleyince hata veriyor, set firmalar=connect.execute("bu alana verdiiğin kodu yapıştırınca hata veriyor")

    zaten böyle yazmak mantıksız gibi, ama doğrusunu bulamadım