Merhaba arkadaşlar.
PHP ve MySQL ‘ de aynı işlevi yapan fonksiyonlar vardır. Mesela php’de time() ve mysql’de UNIX_TIMESTAMP() fonksiyonları 01-01-1970′den bugüne kadar geçen tüm saniyelerin toplamıdır.
Yazılımlarımızda performans kazanımı için özellikle birden fazla sorgu gerçekleştirirken kullanacağımız sorgu cümlelerine dikkat etmeliyiz.
Yukarıdaki timestamp fonksiyonlarını kullanan bir örnek verelim.
Veritabanına 10 satır veri girecek isek php’nin time() fonksiyonunu kullanarak oluşacak timestamp değerinin bir değişkene atayıp sorgularımızı gerçekleştirmemiz daha performanslı olacaktır.
INSERT INTO uyeler VALUES(1, 'Gökhan Bora', UNIX_TIMESTAMP()) INSERT INTO uyeler VALUES(2, 'Ali Veli', UNIX_TIMESTAMP()) .... INSERT INTO uyeler VALUES(10, 'Kırkdokuz Elli', UNIX_TIMESTAMP())
yerine
$tsval = TIME(); INSERT INTO uyeler VALUES(1, 'Gökhan Bora', $tsval) INSERT INTO uyeler VALUES(2, 'Ali Veli', $tsval) .... INSERT INTO uyeler VALUES(10, 'Kırkdokuz Elli', $tsval)
kullanmamız gerekiyor. Çünkü ilk örnekte MySQL 10defa UNIX_TIMESTAMP() fonksiyonunu çalıştırıyor.
Benzer bir durumda mysql RAND() fonksiyonu için geçerli. Birçok programcı bu hataya düşer. Tablodan rasgele bir satırı almak için bu fonksiyonu kullanır. Bunun yerine php’de rasgele sayı üretip bu sayıya göre satırı almalıyız.
Örnek (nettuts’tan alıntıdır.)
// ne yapmamalıyız $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); // doğru olan $r = mysql_query("SELECT count(*) FROM user"); $d = mysql_fetch_row($r); $rand = mt_rand(0,$d[0] - 1); $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");
Aşağıdaki kaynaktan daha fazla performans ipucuna erişebilirsiniz:
Kaynak: http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/
