Şimdi Ara

Hızlı Sorgu MySQL

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
1.886
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 40 Milyon kayıtın bulunduğu bir tablodan sorgu çekmem gerekiyor

    veri tabanı boyutu 6 GB
    Kayıt Sayısı 40.000.000

    $sorgu = mysql_query("Select * From tablo where alan='".$_POST['alan']."''",$db); 
    while($sonuc=mysql_fetch_array($sorgu))
    {

    echo $sonuc['alan'];

    }


    Şeklinde Yapıyorum Yalnız Çok Yavaş Çalışıyor Bunu En Hızlı Nasıl Bir Sorguyla Yaptırabilirim..

    Yardımlarınız İçin Şimdiden Teşekkürler



  • 40 Milyon kaydın olduğu bir veritabanını sql bilmeyen birine açmazlar diye düşünüyorum...
  • dbfg dgnjxdg



    < Bu mesaj bu kişi tarafından değiştirildi rob dö şambır -- 30 Nisan 2013; 14:56:18 >
  • quote:

    Orijinalden alıntı: prosel

    40 Milyon kaydın olduğu bir veritabanını sql bilmeyen birine açmazlar diye düşünüyorum...

    Kendisinindir belki...

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Direkt sorgu içinde açıklayayım meseleyi:

     

    //aşağıda select * from demişsin. yani o tablodaki tüm sütunları çekiyorsun. ancak sadece kullanacağın sütunları çekmelisin ki, işine yaramayacaklar boşuna işlenmesinler ve bellekte yer tutmasınlar
    $sorgu = mysql_query("Select * From tablo where alan='".$_POST['alan']."''",$db);

    //mysql_fetch_array yerine mysql_fetch_assoc kullanman yine işlemciyi ve belleği rahatlatacaktır. mysql_fetch_array sütunları alıp sıralı array'e yerleştiriyor, manasız.

    while($sonuc=mysql_fetch_array($sorgu))
    {

    //burada kodun devamıyla ilgili bilgi mi vermek istemedin de mi böyle yaptın anlamadım. yani, kullanıcının isteğinden aldığın bişeyi, veritabanında kaç taneyse o kadar ekrana basmaktasın şu an. oldukça manasız bir durum. eğer dediğim sebepten dolayı burda böyle yazdıysan sıkıntı yok ancak öyle değilse sıkıntı var.
    echo $sonuc['alan'];

    }



    40 milyon satırla uğraşmak o kadar büyük bir mesele değil. asıl hız kaybını da tablonun 'key''leri ve cache mekanizması yüzünden yaşadığına eminim. 'foreign key', 'primary key' gibi değerleri internette araştır ve bak. Hatta eğer uygun olursa, ben de sisteme bi bakmak isterim, kolay gelsin




  • Arkadaşların yazdıklarına ek olarak eğer 40 M içinde bir kayıt bulmak istiyorsan o alana index koymalısın.

    http://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html
  • Çok kayıtlı sistemlerde Stored Procedure kullanman da sistemi biraz hızlandıracaktır.
  • eğer bilinen bir kolondan veri çekilecekse * işareti yerine istenen veri grubu yazılmalıdır.
    Örnek $degisken=mysql_query("Select id From tablo where....")
    Bu durumda tabloda sadece id aranır diğerleri dikkate alınmaz.Birden fazla veri grubu tayin edecekseniz id,ad,il,ilce gibi uzatabilirsiniz.
    * (yıldız) işareti ilgili satırdaki tüm verileri çekmeye çalışır ve gecikmeye sebep olur.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.