Veritabanı

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ı?"

Abone Ol

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ı, yoksa SELECT ile verileri çekip num_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 

 $sql = "SELECT id FROM hbresim WHERE resimid = '$resim_id'";
$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

$sql = "SELECT COUNT(id) as sayi FROM hbresim WHERE resimid = '$resim_id'";
$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) ve COUNT(*) 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ü:

 SELECT id FROM hbresim WHERE ... ORDER BY sira ASC

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 : 

Abone Ol