Merhaba,
Konuya ufak fakat önemli bir kaç not eklemek istiyorum ;
Öncelikle kendi fikrim olarak * kullanımını hiçbir zaman tavsiye etmem. SELECT * FROM kullanımı bile kabul edilebilir değil.
ilk etapta kullanmak zorunda kalsanız bile SELECT TOP 1 * FROM ya da LIMIT 1 gibi eklemeler ile kullanın, İşinize yarayacak olan sütunları alın ve * yerine onları ekleyin. Tüm sütunları kullanacak olsanız bile * yerine tek tek sütunları girin. İleriye dönük olması açısından düzenlenebilir ve convert edilebilir halde olurlar. Ayrıca kodunuzu daha anlaşılır kılacaktır.
Her gün milyonlarca satır kayıt onlarca sütun ve yüzlerce tablo ile işlemler yaptığımdan olsa gerek * kullanımına karşı çıkmaya başladım çünkü tamamıyla zaman kaybı. SQL'in hız konusundaki anlamını yitirmesine neden oluyor. MongoDB kullananlar gülüyorlardır tabi

( Mutlaka Mongo öğrenin

)
Gelelim count meselesine ;
Count(*) kullanımı da Count(kisi_id) kullanımı da doğru değil.
Neyi arıyorsanız onu saydırın. "Count(Kişi_adi)"
Peki neden ?
Count yapısı bize Sayın Muharrem Arman'ın da örneklemeleri ile bariz olarak göstermektedir ki
her sütunu sayar.
Örneğin A B C sütunları olduğunu ve A sütununda 5, B sütununda 4, C sütununda 8 kayıt olduğunu kabul edelim. Biz eğer Count(*) şeklinde kullanır isek komut sayılabilir tüm sütunları ve bu sütunlardaki sayılabilir ( Null olmayan ) tüm satırları sayacaktır.
Sonuç olarak ise sayılabilmiş maksimum değer ne ise onu gösterecektir. Yani 8.
Sadece Count(A) olsa idi 5, Sadece Count(B) olsa idi 4, Sadece Count(*) olsa idi 8 değeri gelecekti. Ve sadece belirttiğimiz sütunda işlem yaptığı için dolaylı yoldan 1/sütun adedi hızında daha performanslı çalışmış olacaktı.
Sütun adediniz fazla değilse Count(*) ile Count(Sütun) kullanımı arasındaki hız farkını ayırt edemezsiniz. Fakat LOGO gibi yazılımların tablolarında sütunlar 30 hatta daha fazla olabiliyor. Burada Count(*) şeklinde kullanmak mesaiyi boşa geçirmek için iyi bir fırsat.
Bu hız farkını tecrübe etmiş birisi olaraktan Count(*) dahil olmak üzere * kavramını yok etmeye çalışın.
Yazdığınız ya da yazacağınız yüzlerce satırlık SQL kodları arasında bu gibi ufak detaylar sorgu süresini bir hayli etkilemektedir. Sırf bu yüzden veritabanını Mongoya çeviren tanıyorum. Halbuki SQL kodlaması sağlıklı olsa hiçbir sorun olmayacaktı.
Count(Sütun) kullanımını anlamak için bu koda bakabilirsiniz ;
SELECT count(A.isim) FROM (SELECT isim FROM tablo1) A