Php (Pdo) + Mysql İle Sorgu Hızım Normal Mi ?
-
Php 5.6 + Mysql kullanıyorum. Örnek olarak oluşturduğum tid,ad,soyad,durum kolonlarına sahip tabloma 3.3 milyon veri ekledim rastgele. Durum kolonunu indexle dim. pdo ile sorgulama yaparken use index te kullanıyorum. Aşağıdaki gibi kodlarla limit kullanmadan 10 saniye de sorgu tamamlanıyor. Limit 100 kullanınca 0.02 salise de sorgu çalışıyor. Limit 10 bile işimi görüyor aslında ama merak ettim Limitsiz bi kullanım yapmamız gerekirse 10 saniye gerçekten de çok çok uzun bi süre bunun daha pratik bir yolu var mıdır o tür durumlar için ?
$sorgula = vtBaglanti()->prepare("select * from 1mtablo where durum= :d");
$sorgula->execute(array("d"=>2)); -
index'i de B-tree falan yaparsan daha hızlı olur Logn seviyesine çekersin aramaları diye öğrenmiştim hacı
-
* ile döndürmekten vazgeçip klon adlarını açıkça yaz. Eğer ihtiyacın olan veri sınırlıysa limit kullan vs.
Muhammed, ikili arama sıralı verilerde uygulanır.
-
* konusunda haklısınız hocam çok farkediyor aramalarda. Ayrıca cevaplar için teşekkürler..
-
YeniHarman bunu yazdı
* ile döndürmekten vazgeçip klon adlarını açıkça yaz. Eğer ihtiyacın olan veri sınırlıysa limit kullan vs.
Muhammed, ikili arama sıralı verilerde uygulanır.
* kullanmaktan vazgeç derken ben oraya takıldım hocam ? Orayı bi açar mısın
-
Tablodaki sütunların ad, soyad, dogum_tarihi, tc_no, vergi_no
olduğunu varsayalım. Senin select sorgunda ad ve soyad sütunu sadece gerekli diyelim. Sen kalkıp da "Select ad, soyad from tablo" yerine "Select * from tablo" şeklinde kullanırsan performansı düşürmüş olursun.
O yüzden lazım olan sütunları oraya yazman daha güzel olacaktır.
-
Nvidia bunu yazdıYeniHarman bunu yazdı
* ile döndürmekten vazgeçip klon adlarını açıkça yaz. Eğer ihtiyacın olan veri sınırlıysa limit kullan vs.
Muhammed, ikili arama sıralı verilerde uygulanır.
* kullanmaktan vazgeç derken ben oraya takıldım hocam ? Orayı bi açar mısın
$QueryLogin=$db->prepare("SELECT * FROM kullanicilar WHERE 1=1 and IsActive=1 and Name=:kadi AND Password = :password"); $QueryLogin->bindparam(':kadi',$kadi,PDO::PARAM_STR); $QueryLogin->bindparam(':password',$password,PDO::PARAM_INT); $QueryLogin -> execute(); if($QueryLogin->rowCount()) { foreach($QueryLogin as $RowLogin) { $UserId=$RowLogin["UserID"]; print_r(json_encode(UserId)); } }else { echo "error"; }
Buradaki kodda sana sadece USERID Gerekiyor.. Ama sen * ile alayını çekiyorsun... Fazladan veri çekiyorsun.. 100 Satır birşey çektiğinde ve tablonda 10 veri varsa 1000 Column çekmiş olursun.. Fakat;
$QueryLogin=$db->prepare("SELECT id as UserID FROM kullanicilar WHERE 1=1 and IsActive=1 and Name=:kadi AND Password = :password"); $QueryLogin->bindparam(':kadi',$kadi,PDO::PARAM_STR); $QueryLogin->bindparam(':password',$password,PDO::PARAM_INT); $QueryLogin -> execute(); if($QueryLogin->rowCount()) { foreach($QueryLogin as $RowLogin) { $UserId=$RowLogin["UserID"]; print_r(json_encode(UserId)); } }else { echo "error"; }
Böyle yazarsan sadece 100 satır çekmiş olursun :) Vs vs. ;) 1000 columdansa 100 daha iyi gereksiz satır çekmeye gerek yok anlayacağın :) * derken onu diyor sanırım...
-
Muhammed, limiti unutmuşsun: ) Senin sorgu hep tek satir döndürüyor gibi geldi bana.
Sanirim yüksek performans gerektiği durumlarda bir vt sunucusu yerine birkaç tane senkron vt birlikte kullaniliyor. Bunun yaninda sik kullanilan veriler bellekte tutulmali gibi işler var. Hatta sql servirin böyle kendinden bir optimizasyonu vardi diye hatirliyorum.
-
YeniHarman , Abi genelde tek dönüyor zaten tek dönmezse garanti Limit koyuyorum :D Onu unutursak olmaz zaten :D
Nvidia , https://www.youtube.com/watch?v=KgiCxe-ZW8o&list=PL037D23F5CF5CB8B6
Şunu izlemeni tavsiye ederim
-
Eyvallah hocalar ..
-