MyISAM veya InnoDB'ye karar vermeden önce, her bir Depolama Motoruna her bir önbelleğin nasıl
MyISAM
Okunduğunda, bir MyISAM tablosunun dizinleri .MYI dosyasından bir kez okunabilir ve MyISAM Anahtar Önbelleğine yüklenebilir ( key_buffer_size boyutunda ). Bir MyISAM tablosunun .MYD'sini daha hızlı okumayı nasıl sağlayabilirsiniz? Bununla:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Bunu geçmiş yayınlarımda yazdım
InnoDB'nin
Tamam, InnoDB ne olacak? InnoDB, sorgular için disk G / Ç yapıyor mu? Şaşırtıcı, evet öyle !! Muhtemelen bunu söylediğim için deli olduğumu düşünüyorsunuz, ancak SELECT sorguları için bile kesinlikle doğrudur . Bu noktada, muhtemelen "InnoDB, sorgular için disk G / Ç işlemlerini nasıl yapıyor?"
Her şey, InnoDB'nin bir ACID uyumlu İşlemsel Depolama Motoru olduğuna geri dönüyor . İşlemsel olmak InnoDb için, bu desteklemek zorundadır I
in ACID
İzolasyon olduğunu. İşlemler için izolasyonu koruma tekniği MVCC, Multiversion Concurrency Control ile yapılır . Basit bir ifadeyle, InnoDB, işlemler bunları değiştirmeye çalışmadan önce verilerin neye benzediğini kaydeder. Bu nereye kaydediliyor? Sistem tablo alanı dosyasında ibdata1 olarak bilinir. Bu, disk G / Ç gerektirir .
KARŞILAŞTIRMA
Hem InnoDB hem de MyISAM disk G / Ç işlemlerini gerçekleştirdiğinden, hangi rasgele faktörler kimin daha hızlı olduğunu belirler?
- Sütunların Boyutu
- Sütun Biçimi
- Karakter Setleri
- Sayısal Değerler Aralığı (yeterince büyük INT gerektirir)
- Satırlar Bloklar Arasında Bölünüyor (Satır Zinciri)
DELETEs
Ve tarafından neden olunan Veri ParçasıUPDATEs
- Birincil Anahtarın Boyutu (InnoDB, iki anahtar arama gerektiren bir Kümelenmiş Dizine sahiptir)
- Endeks Girişlerinin Boyutu
- liste devam ediyor...
SONSÖZ
Bu nedenle, çok okunan bir ortamda, sabit davranış biçimine sahip bir MyISAM tablosunun, işlemsel davranışı desteklemek için ibdata1 içinde bulunan geri alma günlüklerine yazılan yeterli veri varsa InnoDB'nin InnoDB okuma havuzundan daha iyi performans göstermesi mümkündür. InnoDB verilerine dayatılmıştır. Veri türlerinizi, sorgularınızı ve depolama motorunuzu dikkatlice planlayın. Veriler büyüdükten sonra, verileri taşımak çok zor olabilir.
Bu arada, 5 gün önce böyle bir şey yazdım: mySQL için nasıl bir bellek sınırı atayabilirim?