Sayfalama yöntemi işinizi görecektir. Diğer türlü 1M datayı işleme almanız çok mümkün değil. Bunu ne amaçla kullanırsanız kullanın yapmanız gerekiyor diye düşünüyorum.
Öncelikle yapmanız gereken ilk şey SQL sorgunuzu düzeltmek. Joker karakter kullanmadığınız sürece LIKE yapmanız anlamsız, direk = yapabilirsiniz.
SELECT id, name,surname, birth, ip FROM koop WHERE ip = 'KAPI' ORDER BY birth
İkinci olarak id sütunu için bir INDEX ekleyin.
Üçüncü olarak bu veriyi veritabanından çekerken mi timeout oluyor yoksa json oluştururken mi timeout oluyor bunu tespit edin. Eğer mysql tarafında veriyi çekerken bu sorunu yaşamıyorsanız json oluştururken bu sorunu yaşıyorsunuz demektir. Bu durumda SQL sorgunuzu şu şekilde değiştirmeyi deneyin:
SELECT JSON_ARRAYAGG(JSON_OBJECT(
'id', id,
'name', name,
'surname', surname,
'birth', birth,
'ip', ip
)) FROM koop WHERE ip = 'KAPI' ORDER BY birth
Veriniz doğrudan MYSQL'den json olarak gelsin. Daha sonra siz PHP tarafında sadece ekrana ya da dosyaya yazdırırsınız.
Yine de sorununuzun en uygun çözümü, kodunuzun hangi aşamada en çok kaynağı tükettiğini bulmanızda yatıyor.
bahsettiğiniz ekrana ya da dosyaya yazdırma işi biraz uzaman işine benziyor. bu konuda uzman değilim.
sql sorgurusunu "joker" karakter kullanmadıgım için soylediginiz gibi değiştirdim. sanırım performans arttıracak.
sorunu çok ilkel bir yöntemle çözüyorum.
verileri ekrana json gibi cikti aliyorum.
<?php
$myObj = new stdClass();
$myObj->id] = " $item->id";
$myObj->name = " $item->name";
$myObj->surname = " $item->surname";
$myObj->ip = " $item->ip";
$myJSON = json_encode($myObj);
echo $myJSON;
echo ',';
?>çıktı sonucu;
{"id":" 32332244","name ":" MEHMET","surname ":" HAKANLAR","ip ":" 192.168.1.85"},290.000 veriyi toplamda 31 sayfada görüntülüyorum.
her sayfayı kopyala yapistir yaparak .json içersine ekliyorum.
31 sayfa bittiği zaman 87000k veriyi birlestirmis olacagim.
291k desem 290k'dan yukarisini fazla sirala dedigim de timeout düşüyor.
ilkel falan ama şuan tek yapabildigim cozum bu.
herkese yardımlarından dolayı tesekkur ederim.