@RemusRusanu'ya katılıyorum (cevabı için +1)
SELECT COUNT(*) FROM mydb.mytable
InnoDB bir işlem depolama motoru gibi davranır. MyISAM ile karşılaştırın.
MyISAM
Eğer mydb.mytable
bir MyISAM tablodur, fırlatma SELECT COUNT(*) FROM mydb.mytable;
çok geçmeden gibidir SELECT table_rows FROM information_schema.table WHERE table_schema = 'mydb' AND table_name = 'mytable';
. Bu, MyISAM tablosunun başlığındaki satır sayısının hızlı bir şekilde aranmasını tetikler.
InnoDB'nin
Eğer mydb.mytable
bir InnoDB tablosu ise, her şeyin yolunda gitmesini sağlarsınız. MVCC devam ediyor ve aşağıdakileri yönetiyor:
- ib_logfile0 / ib_logfile1 (Günlükleri Yeniden Yap)
- ibdata1
- Günlükleri Geri Al
- rollbacks
- Veri Sözlüğü Değişiklikleri
- Tampon Havuzu Yönetimi
- İşlem İzolasyonu (4 tip)
- Tekrarlanabilir Okumalar
- Okundu Gönderildi
- Kullanılmayan Oku
- Serileştirilebilir
InnoDB'den bir tablo sayısı istemek, bu uğursuz şeylerde gezinmeyi gerektirir. Aslında, hiç kimse gerçekten SELECT COUNT(*) from mydb.mytable
tekrarlanabilir okumaları sayar mı yoksa taahhüt edilmiş ve taahhüt edilmemiş okumaları da içerir.
İnnodb_stats_on_metadata'yı etkinleştirerek işleri biraz dengelemeyi deneyebilirsiniz .
İnnodb_stats_on_meta_data üzerindeki MySQL Belgelerine göre
Bu değişken etkinleştirildiğinde (değişken oluşturulmadan önceki varsayılan değerdir), InnoDB, SHOW TABLE STATUS veya SHOW INDEX gibi meta veri deyimleri sırasında veya BİLGİ_SCHEMA tabloları TABLOLAR veya İSTATİSTİK'ye erişirken istatistikleri günceller. (Bu güncellemeler ANALYZE TABLE için olanlara benzer.) Devre dışı bırakıldığında, InnoDB bu işlemler sırasında istatistikleri güncellemez. Bu değişkeni devre dışı bırakmak, çok sayıda tablo veya dizin içeren şemaların erişim hızını artırabilir. Ayrıca, InnoDB tablolarını içeren sorgular için yürütme planlarının kararlılığını artırabilir.
Devre dışı bırakılması, EXPLAIN planlarının oluşturulması açısından size daha istikrarlı bir sayı verebilir veya vermeyebilir. Performansını SELECT COUNT(*) from mydb.mytable
iyi bir şekilde, kötü bir şekilde etkileyebilir veya hiç etkilemeyebilir . Bir deneyin ve görün !!!