MySQL motorları: InnoDB ve MyISAM – Karşılaştırma

mysql_innodb_myisam

Eğer kurumsal çapta bir yazılım geliştirmeyi ve veri tabanı yönetim sistemi olarak MySQL’ i kullanmayı düşünüyorsanız, MySQL depolama motorlarının artılarını ve eksilerini iyi biliyor olmanız gerekir. Hedeflediğiniz ihtiyaca göre yapacağınız seçimler, uzun vadede, kayıt sayısı arttıkça başınıza büyük sorunlar açabilir.

Bu yazımda sizlere, ihtiyaçlarınız doğrultusunda, MySQL’ den alabileceğiniz verimi ve performansı maximize edecek bilgiler vermek ve MySQL depolama motorlarını hızlı bir karşılaştırmasını yapmak istiyorum. Bu karşılaştırmanın ihtiyacınız için en doğru depolama motorunu seçmenizde sizlere yardımcı olmasını ümit ediyorum.

2013 yılında buna benzer bir karşılaştırmayı zaten yapmıştım ama bloguma yapılan saldırılar neticesinde maalesef 2013 yılına ait tüm yazılarımı kaybettim 🙁 Aradan hemen hemen 2 yıl geçti, hem MySQL üzerinde yapılan güncellemeler hem de teknolojik gelişmeler neticesinde böyle bir karşılaştırmayı yeniden yapmak faydalı olacaktır diye düşünüyorum.

MyISAM özellikleri

  • Tasarımı kolaydır bu nedenle yeni başlayanlar için tavsiye edilir.
  • Tablolar arası ilişkiler yoktur (foreign key constraint).
  • Basit yapısı sebebiyle InnoDB’den daha hızlıdır. 
  • Sunucu kaynaklarının kullanımı göz önünde bulundurulduğunda daha az maliyetlidir.
  • Full-text indexing yapılabilir.
  • Özellikle yoğun okuma (read-intensive) yapılan uygulamalar için çok uygundur.

InnoDB özellikleri

  • Transaction desteği vardır (böylece ACID özellikleri için destek sağlar).
  • Satır seviyesinde kilitleme desteği sağlar. Bu özelliği ile MyISAM’a göre daha tutarlıdır denilebilir (concurrency).
  • Tablolar arası ilişkiler tanımlanabilir. Bu özelliği ile veri bütünlüğü daha iyi sağlanmış olur (integrity).
  • Tablo bozulmalarına karşı MyISAM’dan daha dirençlidir.
  • Hem tablolar hem de indexler için daha büyük tampon havuzu (buffer pool) destekler. MyISAM yalnızca indexler için tampon havuzu desteği sağlar ve daha küçüktür.
  • MyISAM motoru ilerleyişi (geliştirme anlamında) durmuş durumdadır. Dolayısıyla, tüm yeni özellikler InnoDB tarafından desteklenmiş olacaktır.

MyISAM limitleri

  • Tablolar arasında ilişkiler mümkün değildir (foreing key constraint)
  • Transaction desteği yoktur.
  • Satır limiti 4,284,867,296 dır.
  • Her satır için maximum 64 index oluşturulabillir.

InnoDB limitler

  • Full-text index desteği yoktur (MySQL 5.6 öncesi sürümler için)

Konunun daha iyi anlaşılması açısından aşağıdaki tabloyu da paylaşmak istiyorum. Bu tabloyu MySQL’ nin resmi sitesinden olduğu gibi aldım.

FeatureMyISAMMemoryInnoDBArchiveNDB
Storage limits256TBRAM64TBNone384EB
TransactionsNoNoYesNoYes
Locking granularityTableTableRowTableRow
MVCCNoNoYesNoNo
Geospatial data type supportYesNoYesYesYes
Geospatial indexing supportYesNoNoNoNo
B-tree indexesYesYesYesNoNo
T-tree indexesNoNoNoNoYes
Hash indexesNoYesNo[a]NoYes
Full-text search indexesYesNoYes[b]NoNo
Clustered indexesNoNoYesNoNo
Data cachesNoN/AYesNoYes
Index cachesYesN/AYesNoYes
Compressed dataYes[c]NoYes[d]YesNo
Encrypted data[e]YesYesYesYesYes
Cluster database supportNoNoNoNoYes
Replication support[f]YesYesYesYesYes
Foreign key supportNoNoYesNoNo
Backup / point-in-time recovery[g]YesYesYesYesYes
Query cache supportYesYesYesYesYes
Update statistics for data dictionaryYesYesYesYesYes

 

[a]  InnoDB hash indexleri “Adaptive Hash Index” özelliği için kendi içerisinde desteklemektedir.
[b]  InnoDB FULLTEXT indexleri MySQL 5.6.4 ve sonraki sürümlerinde desteklemektedir.
[c]  Sıkıştırılmış MyISAM tabloları yalnızca “sıkıştırılmış satır formatı” kullanıldığında mümkündür. MyISAM ile birlikte “sıkıştırılmış satır formatı” kullanan tablolar salt okunurdur.
[d]  Sıkıştırılmış InnoDB tabloları, InnoDB Barracuda dosya formatı gerektirir.
[e]  Depolama motoru yerine sunucu üzerinde gerçeklenmiştir.
[f]  Depolama motoru yerine sunucu üzerinde gerçeklenmiştir.
[g]  Depolama motoru yerine sunucu üzerinde gerçeklenmiştir.

Umarım faydalı bir yazı olmuştur.

Hepsi bu kadar 🙂

, , , ,

No comments yet.

Bir Cevap Yazın

Font Resize