• 11-03-2014, 10:48:40
    #1
    Üyeliği durduruldu
    Arkadaşlar,

    Online kullanıcı ve kayıt sayısı çok olan bir tablodan rastgele atıyorum 20 kayıt getirmek için mysql rand fonksiyonu haliyle db'ye takla attırıyor. Php ile yada mysql ile alternatif yöntemlerinizi yazabilir misiniz ?
  • 11-03-2014, 11:15:49
    #2
    rand'ın bahsettiğiniz kadar bir yük bindireceğini düşünmüyorum ama alternatif fikir olması için indexli bir int sütunu örneğin İD , php rand ile oluşturup bunu sorgulayabilirsiniz. Dediğim gibi çok bir fark olacağını düşünmüyorum..
  • 11-03-2014, 13:42:41
    #3
    Başıma geldiği için biliyorum db'ye gerçekten takla attırır. Size tavsiyem mysql_data_seek kullanın. Random değerler ile aşağı yukarı gezip dilediğiniz kadar çekersiniz.
  • 11-03-2014, 13:44:42
    #4
    Met adlı üyeden alıntı: mesajı görüntüle
    Başıma geldiği için biliyorum db'ye gerçekten takla attırır. Size tavsiyem mysql_data_seek kullanın. Random değerler ile aşağı yukarı gezip dilediğiniz kadar çekersiniz.
    bu konu hakkında Türkçe bir makale var mı acaba?
  • 11-03-2014, 14:09:19
    #5
    Üyeliği durduruldu
    pdo kullanıyorum. sanırım çalıştıramam mysql_data_seek'i ama merak ettim bunu.
  • 11-03-2014, 14:14:37
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @Quismo; PDO'da mysql_data_seek için şu bağlantıya bakabilir misin?
  • 11-03-2014, 22:45:24
    #7
    Kayıt sayısı az ise performans iyidir.
    Tablo 1-2 stundan oluşuyorsa performans iyidir.

    $sonuc_q=mysql_query("select * from tablo order by rand() limit 20");
    
    while($sonuc = mysql_fetch_assoc($sonuc_q)){
    	$sonuclar[] = $sonuc;
    }
    
    print_r($sonuclar);
    --------------------

    Kayıt sayısı çok ve tabloda stun sayısı fazla ise çok daha iyidir. Burda stun sayısı çok önemli 10-15 stun olan bir tabloda inanılmaz fark yaşarsınız. Aynı zamanda birleşik tablolarda rand kullanmak yerine bu sorgu daha performanslıdır.

    $sonuc_q = mysql_query("select * from tablo where 1");
    
    $toplam_kayit = mysql_num_rows($sonuc_q);
    
    for($i=0; $i<20; ++$i){
    	$random = rand(0,$toplam_kayit-1);
    
    	mysql_data_seek($sonuc_q,$random);
    	
    	$sonuclar[]	=	mysql_fetch_assoc($sonuc_q);
    }
    
    print_r($sonuclar);