COUNT() mü yoksa num_rows mu? Hangi Yöntem Daha Performanslı?
"Kayıt sayısını öğrenmek için COUNT() fonksiyonu mu kullanılmalı, yoksa SELECT ile verileri çekip num_rows ile mi sayılmalı?"
Web uygulamaları geliştirirken veritabanından kayıt sayısı almak çok yaygın bir ihtiyaçtır. Özellikle içerik yönetim sistemlerinde, örneğin bir habere ait galeri resimlerinin sayısını göstermek istediğimizde bu ihtiyaç kendini gösterir. Ancak burada kritik bir soru var:
"Kayıt sayısını öğrenmek için
COUNT()
fonksiyonu mu kullanılmalı, yoksaSELECT
ile verileri çekipnum_rows
ile mi sayılmalı?"
Bu yazıda bu iki yöntemi performans açısından karşılaştıracak, en doğru ve hızlı yaklaşımı ele alacağız.
Senaryo: Habere Ait Galeri Resimlerini Saymak
Varsayalım ki hbresim
adında bir tablomuz var ve bu tabloda her haber için birden fazla galeri resmi tutuluyor. Her resim kaydının id
, resimid
, resimyolu
gibi alanları mevcut.
Amacımız: Belirli bir habere ait toplam kaç galeri resmi olduğunu öğrenmek.
Yöntem 1: SELECT id
+ $result->num_rows
$result = $con->query($sql);
$resim_sayisi = $result->num_rows;
Bu yöntem ilk bakışta işe yarıyor gibi görünse de, performans açısından dezavantajları var:
-
MySQL, eşleşen tüm
id
değerlerini belleğe alır. -
Özellikle
hbresim
tablosu büyükse (örneğin binlerce resim kaydı varsa), hafıza tüketimi artar. -
ORDER BY
gibi eklemeler de varsa, işlem daha da yavaşlar.
Yöntem 2: SELECT COUNT(id)
ile Sayım
$result = $con->query($sql);
$row = $result->fetch_assoc();
$resim_sayisi = (int)$row['sayi'];
Bu yöntem çok daha hafif ve hızlıdır:
-
MySQL sadece sayıyı hesaplar, veri çekmez.
-
Daha az bellek kullanılır.
-
Özellikle büyük tablolarda ciddi performans farkı oluşur.
COUNT(*)
mi COUNT(id)
mi?
Eğer id
alanı birincil anahtar (PRIMARY KEY
) ve NOT NULL
ise:
-
COUNT(id)
veCOUNT(*)
aynı sonucu verir. -
Her ikisi de indekslenmiş kolon üzerinden çalıştığı için hızlıdır.
Bu nedenle, COUNT(id)
performanslı ve doğrudur.
Bonus: ORDER BY
Tuzağı
Kayıt sayısı almak istiyorsanız, ORDER BY
kullanmayın. Çünkü:
Bu, sıralama maliyeti ekler. Halbuki COUNT()
kullanırken sıralamaya ihtiyaç yoktur.
Sonuç: En İyi Yöntem Hangisi?
Yöntem | Performans | Bellek Kullanımı | Uygun Durum |
---|---|---|---|
SELECT id + num_rows |
Düşük | Yüksek | Veri de kullanılıyorsa |
SELECT COUNT(id) |
Yüksek | Düşük | Sadece sayım için |
Yani sadece kayıt sayısı gerekiyorsa, her zaman SELECT COUNT(id)
kullanın.
Kritik işlevleri hızlandırmak için küçük detaylar büyük fark yaratır. Bu yazıyı beğendiysen paylaşmayı unutma!
Haber :
Dünyadan
Çok Okunanlar
» Henüz BUGÜN Haber Görünmüyor