MySQL, MyISAM Hakkında

MyISAM

ı olarak tanımlayabiliriz. Ayrıca metin alanlarını index‘lemek için kullanılan fulltext index yapısını kullanabilmek için MyISAM tablo yapısına ihtiyaç duyarız.

MyISAM her ne kadar yüksek veriler içerisinde select yapmak için önerilmese de, özellikle insert işlemlerinde sağladığı performans göz önüne alındığında, son derece güçlü bir yapıya sahip olduğu gözden kaçmayacak gibi değil. Mesela projenizde yer alan kullanıcıların hareketlerini kayıt almak (loglamak) istiyorsanız sürekli kayıt yapılacağından, log tablolarınızı MyISAM olarak belirlemek performans açısından artı sonuç sağlayacaktır.

MyISAM, 3 değişik dosyada kendi içerisinde algılayabileceği bir formatta veri tutar. Bir nevi text dosyası olduğundan verinin boyutu düşük olur. Varsayılan olarak 4GB‘lık veri saklama kapasitesi içeren MyISAM, ufak değişikliklerle 4GB‘lık veri boyutunu tabi ki de değiştirebilir, büyütüp küçültebiliriz, ama select yapacaksak bu tablodan verim elde etmek mümkün değildir.

MyISAM olarak bir tablo oluşturduğumuzda veritabanı içerisine üç ayrı dosya oluşturur, frm, MYD, MYI;

  • frm: Tablo yapısını içerisinde muhafaza eder.
  • MYD: İçerisinde dataları barındırır.
  • MYI: Tablo içerisinde bulunan index’leri içerisinde barındırır.

MyISAM text bazlı veri tuttuğu için, server üzerinde oluşabilecek aksaklıklardan dolayı tablo yapısınım bozulma olasılığı oldukça yüksektir. Her ne kadar tablo bozulan tablo yapılarını düzeltmek için gerekli işlemler var olsa da düzenli aralıklarla aşağıdaki komutla tablolarınızı düzeltmenizde fayda var;

MyISAM’ın artılarından en yararlı bulduğum yanlarından biri de bizi LIKE komutunun hantallığından kurtararak fulltext-index yapmamıza olanak sağlamasıdır. Arama işlemlerinde klasik manada LIKE komutu kullanıyorsanız, o MySQL’in halini düşünemiyorum 🙂

Eğer düzgün bir veritabanı yapınız varsa fulltext-index yaparak milyonlarca data içerisinden belli bir kelimeyi aratmanız bokta atışı gibi olacak ve 1 saniyenin altında sorgu sonuçlarıyla karşılaşacağımızdan, fulltext-index kullanmanızı şiddetle öneriyorum. MyISAM’ın insert yapısının hızlı olmasının nedenlerinden biri de transaction yapısının olmamasındandır.

MyISAM tablo yapısıyla oluşturulan bir tablo içerisinde yapılan her update, tablo yapısının sarılamasını bozacaktır. Dolayısıyla yapılan her güncellemeyle, tablonuzun select performansı düşecektir.

Bunu göz önüne aldığımızda, MyISAM ile oluşturduğumuz tablolarda update yapmaktan mümkün olduğunca kaçınmamız gerekir. Eğer update komutu kullanılması gerekiyorsa, tablo yapısını InnoDB yapmamız veya ille de MyISAM olsun diyor isek tabloyu düzenli aralıklarla repair yani tamir/düzeltmemiz gerekir.

Leave a Reply

Your email address will not be published. Required fields are marked *