• 25-06-2010, 03:55:30
    #1
    Merhaba arkadaşlar. elimde 10 milyon veri bulunan , tek tablolu ve 3 sütünlu bir mysql var. Mysql de xx olan id yi bulduruyorum, Ardından o id deki xx sütünün çekiyorum. Yan ;

    $encode = $_POST['encode'];
    $row = mysql_fetch_array(mysql_query("SELECT * FROM `md5` WHERE encode='$encode'")); 
    $sonuc = $row[decode];
    Ama bu işlem 30-40 sn sürüyor. Bunu hızlandırmanın bir yolu var mıdır ?
  • 25-06-2010, 04:00:11
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ALTER TABLE `md5` ADD INDEX ( `encode` ) ;

    Sorgunun tamamlanması uzun sürer ama sonunda güzel sonuç alacağınızı düşünüyorum.
  • 25-06-2010, 04:02:28
    #3
    GeCe_ adlı üyeden alıntı: mesajı görüntüle
    ALTER TABLE `md5` ADD INDEX ( `encode` ) ;

    Sorgunun tamamlanması uzun sürer ama sonunda güzel sonuç alacağınızı düşünüyorum.
    Sorgu yu mysql de çalıştırdığımda, Sorgu lar hızlanır mı ? (ve, encode,decode,id var hepsinde tek tek çalıştıryım mı bittikçe ? )
  • 25-06-2010, 04:15:33
    #4
    Yukarıda yazdığım kod indexleme için kullanılır.
    where encode='bul'
    şeklinde biten bir sorgu için encode alanını indexlemek sorguyu gözle görülür biçimde hızlandırır.

    where encode='bul' and kategori='armut'
    yukarıdaki gibi bir sorgudada encode ve kategori alanlarının indexlenmesi faydalı olacaktır.
  • 25-06-2010, 09:08:58
    #5
    Üyeliği durduruldu
    bi encodun 2 defa kaydedilmesinin saçma olduğunu düşünürsek unique index oluşturmak hızı arttıracaktır..

    "create unique index encodeindexi on md5(endocode)"

    tablo adının md5 olması bu sorgunun hatalı çalışmasına sebep olabilir cunku md5 adında bir fonksiyon var.

    "create unique index encodeindexi on `md5`(endocode)"

    bir de böyle denersiniz.
  • 25-06-2010, 09:46:09
    #6
    Üyeliği durduruldu
    dizi kullanimlarinizda hatali bu arada;
    Alıntı
    $sonuc = $row[decode];
    https://www.r10.net/php/322923-dizi-k...-yaklasim.html

    fetch_array yerine fetch_assoc ta kullanabilirsiniz
  • 25-06-2010, 11:55:44
    #7
    D3LLy adlı üyeden alıntı: mesajı görüntüle
    bi encodun 2 defa kaydedilmesinin saçma olduğunu düşünürsek unique index oluşturmak hızı arttıracaktır..

    "create unique index encodeindexi on md5(endocode)"

    tablo adının md5 olması bu sorgunun hatalı çalışmasına sebep olabilir cunku md5 adında bir fonksiyon var.

    "create unique index encodeindexi on `md5`(endocode)"

    bir de böyle denersiniz.
    hocam kodların 2 side hata verdi. ama tablo a baktığımda Karşılaştırma kısmında : kullanımda yazısı çıkıyor ve girilmiyor. Acaba yanlış bişey mi yaptım ?


    Yeni

    Düzeldi arkadaşlar, Ama bişey olduğunu sannetmiyorum. Çünkü hata veriyordu
  • 25-06-2010, 12:40:50
    #8
    asıl sorun bütün verilerin tek tabloda tutulması, yani veritabanı yapısı 10 milyon verinin 1 tabloda tutulması bilmiyorum ama yani ben olsam parçalarım o kadar veriyi okutmam. ölçekleme her zaman gerekli.

    ama sitenin nasıl çalıştığını bilmediğim için bir şey söylemem. yani 2 tabloya ayrılabilir ilk önce verilerin giriş tarihine göre ne zaman kayıt olduğu tutulur.

    Sonra kayıt tarihine göre gerekli tabloda veri aranır.Bu yöntem gerekli veriyi 10 milyon değil 1 milyon veri arasında arayacağı için çok daha hızlı çalışacaktır. yukarıda dediğim gibi ölçekleme.
    Başka bir yöntem ise donanım ekleme sunucunuza alacağınız ekstra donanım mutlaka işlemleri hızlandıracaktır ki kısa kod her zaman en hızlı değildir. kodları kısaltmak için harcayacağınız paranın yarısını donanıma harcarsanız daha fazla performans alabilirsiniz.

    Diğer bir yöntem ise , verileri sabit bir dosya olarak tutma, mysql sorgusu yerine dosya açıp onun içindeki verileri okutma. Çok fazla performans fark etmese bile genede hızlandıracaktır. CPU kullanımını azaltacaktır.
  • 25-06-2010, 19:39:26
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    10 Milyon veri mi?

    Mutlaka mysql_fetch_assoc kullanın. Kullanacağınız sütunları SELECT sutun1, sutun2 şeklinde kullanın. Sayfalama ve cache sistemi ekleyin. Cachelemeyi mutlaka dosya ile yapın.