• 26-06-2009, 23:10:59
    #1
    select * from tags order by rand() limit 100
    Bu şekilde veri çekilen bir database mevcut, fakat tags kolonunda yaklaşık 100K etiket mevcut bu yüzden sunucu çok kasıyor, alttaki kod yardımı ile acaba bu yoğunluk düşermi? Ek olarak alttaki kod ile sadece ilk 10000 veri listelenir diye biliyorum yoksa yanılıyor muyum? Benim istediğim tüm verileri bölümlere ayırarak tüm etiketlerin listelenebilmesi, yani sadece ilk 10000 değil kolonun tamamının listelenmesini istiyorum, önerebileceğiniz bir kod varmıdır?
    $rID=rand(0, 10000);
    $tag=mysql_query("select * from tags limit $rID,100");
  • 27-06-2009, 13:48:18
    #2
    taglar tablosuna index oluştur.

    taglar tablosuna yapılan her insertten sonra taglar tablosunun row sayısını bir tabloda sakla.(Ayarlar tablosu gibi bir yer var ise orada bir kolon açılıp saklanabilir
    select count(*) s from tags

    daha sonra tagları basmak istediğin yerde. Önce ayarlar tablosunda row sayısını çek.

    $tags=array();
    for($t=0;$t<100;$t++)
    {
    $g= select * from tags limit " . rand(0, rowsayısı) .", 1 ;
    array_push($tags,$g);
    }

    yukarıda ki gibi servera hiç yük bindirmeden yapabilirsin. Server order kelime kullanara soru attığında büyük tablolarda kasılması normaldir. Birde site içerisinde her request için bunu yapıyorsa servera aşırı yük biner. Yukarıdaki kodu yapabilirsen sorun kalmaz.
  • 27-06-2009, 20:26:54
    #3
    Kodu yazdığın şekilde uygulayamadım ama en azından mantığı hakkında bi fikir edinmeme sebep oldu. İlgin için teşekkür ederim, ben denemelere devam edeyim