Döngüsel Sorgular

Döngüsel sorgular nedir, nasıl oluşur?

Bir döngü içinde mysql sunucusuna gönderilen sorgulara döngüsel sorgular ismini veriyorum, bu tip sorgular tehlikelidir çünkü kaynak, zaman tüketirler ve kod yazımı sırasında dikkat çekmezler, programcı işini en kısa sürede bitirmeye odaklandığı için, o an ihtiyacı olan veriyi sorgu ile almaktan çekinmeyecektir. Çoğu zaman da döngülerle çalıştığından, bir döngünün içinde, koşula bağlı olarak, defalarca sorgu gönderecektir. Geliştirme aşamasında veri ve kullanıcı sayısı az olduğu için performansta düşüş hissedilmez, fakat uygulama web’e konulduğunda biraz yoğun bir sistemde geç açılan veya hiç açılmayan sayfalara neden olacaktır.

Nasil engellenebilir?

Elbette en basit şekilde döngü içinde sorgu göndermeyerek, bunun içinde geliştirme aşamasında gönderdiğiniz sorguları izlemeli, gereksiz sorgulardan kaçınmalısınız. Kendi yazacağınız veya kullandığınız apinin gönderdiği sorguları raporlama özelliği olmalı, örnepin ADOdb‘nin böyle bir özelliği var, bu sorguların izlenmesini kolaylaştıracaktır. Bu arada herzaman döngüsel sorgular kullanılmaz diye bir iddiam yok, bu tip sorgulara çoğunlukla update sorgularında ihtiyaç duyuluyor, fakat çoğu select ve insert sorgusu kodlama ile tek bir sorguya indirilebilir.

Örnekler
En basit örneği phpMyAdmin‘de görmüşsünüzdür. phpMyAdmin verileri export ederken adına extended inserts, Türkçesinde “Tablo ismini ve INSERT deyimini sadece bir kez kullan” olarak geçiyor, denilen aynı anda birden fazla satır oluşturan 1 (bir) sorgu üretebilir. MySQL 3.22.5’den sonraki versiyonlarda geçerli olan, bu sorgu birden fazla insert yapmaya olanak sağlar.

Select sorgularını engellemek için join kavramını öğrenmeniz gerekiyor, zaten döngüsel sorgulara çoğu zaman farklı tablolarda bulunan veride önce bir veriyi çekip sonra ilişkili diğer veri/veriler için başka sorgular kullanılan durumlarda rastlıyorum (başkalarının kodlarında), halbuki baştan yapıyı doğru kurarak join ile tek sorguda problem giderilebilir.

PHP 5 Power Programming

Henüz okumadım, aç gözlü eski bir kitap kurdu olarak indirdim, okunacak kitaplar arasına koydum. Biraz bakındım içeriğine ismi Power Programming ama daha çok giriş seviyesinde bir kitap, bu işe yeni başlayanların alıp okuyabileceği, bakabileceği bir başvuru kaynağı niteliğinde. Biraz uzun, 720 sayfa kadar diyorlar.

Kitap Sayfası : http://www.informit.com/store/product.aspx?isbn=013147149X#info4
Gördüğüm Yer : http://www.turk-php.com/index.php?action=browseArticle&catID=200&articleID=614

Sorguları İzlemek

Nedir? Neden gereklidir?

Dinamik içeriğe sahip sitelerde “0.021 sn’de üretildi, 34 sorgu kullanıldı” şeklinde yazılar görmüşsünüzdür. En basit kontrol bu tip notlar olsa gerek. Günümüzde her şey hızlı olmak zorunda kimsenin, özellikle web kullanıcılarının, sitenizin açılmasını beklemeye tahammülü yok.

Herkes optimizasyon ve daha iyi teknikler peşinde. Kaynakların önemini onları kaybettiğinizde, siteniz büyümeye başladığında, anlıyorsunuz. Daha hızlı sayfa üretmek için daha az sayıda sorgu kullanmak zorundasınız, daha az sorgu içinde ne kadar sorgu kullandığınızı bilmeniz, izlemeniz gerekiyor. Yazdığınız sorguları izledikçe aslında çoğunun birleştirilip, azaltılabileceğini göreceksiniz. Ayrıca daha önce döngüsel sorgulardan bahsetmiştim. Sorguları izlemek döngüsel sorguları kolayca farketmenizi sağlayacaktır. En azından ne yaptığınızı bileceksiniz.

Nasıl yapılır?

En basit şekilde bir fonksiyon yazarak izleyebilirsiniz. Aşağıdaki gibi bir fonksiyon gönderdiğiniz sorguyu global bir değişkene ekler. Sayfanın sonunda bu değişkeni bastırarak o sayfada ne kadar sorgu kullanmışsınız görebilirsiniz.


<?php

function t_mysql_query($qry) {
global $allqry;
$allqry .= $qry . "<br />";
return mysql_query($qry);
}
?>