Ne zaman COUNT(*)
o sayısı, sütun endeksler alır, bu yüzden en iyi sonuç olacaktır. MyISAM motorlu Mysql aslında satır sayısını depolar, tüm satırları her saymaya çalıştığınızda tüm satırları saymaz. (birincil anahtarın sütununa göre)
Satırları saymak için PHP'yi kullanmak çok akıllıca değildir çünkü mysql'den php'ye veri göndermeniz gerekir. Mysql tarafında aynısını elde edebildiğinizde neden yapasınız?
Eğer COUNT(*)
yavaş, çalıştırmak gerektiğini EXPLAIN
sorguya ve endeksler gerçekten kullanılırsa kontrol ve nerede eklenmelidir.
Aşağıdakiler en hızlı yol değildir , ancak COUNT(*)
gerçekten uymayan bir durum vardır - sonuçları gruplamaya başladığınızda, COUNT
tüm satırları gerçekten saymayan bir problemle karşılaşabilirsiniz .
Çözüm şudur SQL_CALC_FOUND_ROWS
. Bu genellikle satırları seçerken kullanılır, ancak yine de toplam satır sayısını bilmeniz gerekir (örneğin, sayfalama için). Veri satırlarını seçtiğinizde, SQL_CALC_FOUND_ROWS
anahtar kelimeyi SELECT'ten sonra eklemeniz yeterlidir:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Gerekli satırları seçtikten sonra, bu tek sorgu ile sayıyı alabilirsiniz:
SELECT FOUND_ROWS();
FOUND_ROWS()
veri seçme sorgusundan hemen sonra çağrılmalıdır.
Sonuç olarak, her şey aslında kaç girişiniz olduğuna ve WHERE ifadesinde ne olduğuna bağlıdır. Çok sayıda satır olduğunda (onbinlerce, milyonlarca ve üstü) dizinlerin nasıl kullanıldığına gerçekten dikkat etmelisiniz.
SELECT 1
ve kullanmıyorumSELECT *
. Bir fark var mı?