Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
1957
Tıklama
0
Öne Çıkarma
Hızlı Sorgu MySQL
B
13 yıl
Er
Konu Sahibi

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



P
13 yıl
Yüzbaşı

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


Bu mesaja 2 cevap geldi.
R
13 yıl
Yüzbaşı

dbfg dgnjxdg





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

T
13 yıl
Yarbay

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ı >
Bu mesaja 1 cevap geldi.
W
13 yıl
Çavuş

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


Bu mesaja 1 cevap geldi.
O
13 yıl
Teğmen

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


Bu mesaja 1 cevap geldi.
O
13 yıl
Çavuş

Çok kayıtlı sistemlerde Stored Procedure kullanman da sistemi biraz hızlandıracaktır.



A
5 yıl
Er

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.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.