• 03-12-2012, 19:15:20
    #1
    Üyeliği durduruldu
    Merhabalar arkadaşlar,
    9milyon satırlı bir tablom var veritabanımda ziyaretçileri kayıt eden.
    Bu tablo sayfamda fonksiyon olarak çağırılıyor bunu fonksiyon dışına alıp normal şekilde insert update yaptırsam daha mı iyi olur yoksa farketmezmi acaba?

    Fonksiyonum;
    function ziyaretkaydet($firmaid){
    $ip=$_SERVER['REMOTE_ADDR'];
    $sonuc=mysql_query("select * from ziyaret where firmaid='$firmaid' and ip='$ip'");
    if (mysql_num_rows($sonuc)<=0){
    mysql_query("insert into ziyaret values('','$firmaid','$ip')");
    mysql_query("update firmalar set ziyaret=ziyaret+1 where id='$firmaid'");
    } 
    }
    Sayfada fonksiyon.php den çağırdığım kod;
    ziyaretkaydet($id);
  • 03-12-2012, 20:01:30
    #2
    daha iyi olacağını zannetmiyorum. daha farkli bir algoritma geliştirebilirsin.
  • 03-12-2012, 20:10:44
    #3
    fonksiyon için; fonksiyonun başına

    function ..()
    {
        $start = microtime();
        ....
        $end = microtime();
        list($sm, $ss) = explode(' ', $start);
        list($em, $es) = explode(' ', $end);
    
        echo number_format((($em + $es) - ($sm + $ss)), 4);  
    }
    ile 10 defa deneyip, ekrana yazılan saniyeyin ortalama değerini alırsınız.

    <?php
        $start = microtime();
    
        //tüm kodların, çalışan sorguların...
    
        $end = microtime();
        list($sm, $ss) = explode(' ', $start);
        list($em, $es) = explode(' ', $end);
    
        echo number_format((($em + $es) - ($sm + $ss)), 4);
    ile deneyip yine ortalama alırsınız.

    Bu oranlar şu şekildeyse göz ardı edilir.

    1. durum: 0.0075
    2.durum:0.0065

    ama şu şekildeyse dikkate alınır.

    1.durum:0.007
    2.durum:0.01, 0.02, 0.03

    Ama kayda değer birşey olmalı mesela 10k sorgu için burada fark ortaya çıkar diye düşünüyorum.

    Şahsi fikrim fonksiyon içinde bu sorguların kullanılması daha uygun. Çok çok cüzzi bir fark ile fonksiyon +1 önde derim.

    select * from ziyaret where firmaid='$firmaid' and ip='$ip'
    bu tabloda 4M kayıt var ise index kullanma ve (*) ile gelen tüm kolonlar gerekmiyorsa yanlış olur.
  • 03-12-2012, 20:41:48
    #4
    Üyeliği durduruldu
    2 sütun var hocam ikiside kullanılıyor time ve ip addresi

    İlk yazdığınızı yanlış anlamadıysam performansı ölçüyor değilmi sayfanın yükleniş saniyesi yazacak şuanda deneyemiyorum da
  • 03-12-2012, 21:04:10
    #5
    Üyeliği durduruldu
    function ziyaretkaydet($firmaid){
    $ip=$_SERVER['REMOTE_ADDR'];
    $sonuc=mysql_query("select * from ziyaret where firmaid='$firmaid' and ip='$ip'");
    if (mysql_num_rows($sonuc)<=0){
    mysql_query("insert into ziyaret values('','$firmaid','$ip')");
    mysql_query("update firmalar set ziyaret=ziyaret+1 where id='$firmaid'");
    }
    }

    en iyi iyileştirme bana göre ;

    function ziyaretkaydet($firmaid){
    $ip=$_SERVER['REMOTE_ADDR'];
    $sonuc=mysql_query("select id from ziyaret where firmaid='$firmaid' and ip='$ip'");
    if (!$sonuc){
    mysql_query("insert into ziyaret values('','$firmaid','$ip')");
    mysql_query("update firmalar set ziyaret=ziyaret+1 where id='$firmaid'");
    }
    }
  • 03-12-2012, 23:01:54
    #6
    Üyeliği durduruldu
    zekice teşekkürler