2010-01-22 20 views
8

Yaklaşık 30 tablo içeren bir veritabanım var ve bunların 5 tablosu yazma yoğun.MyISAM ve InnoDB tabloları bir veritabanında

Ben InnoDB'nin motor kullanmak InnoDB'nin motoru kullanmak ve

  • dönüştürme MyISAM motoru üzerinde tüm tabloları geri kalanı tutmak

    1. Dönüştür 5 yazma yoğun tablolar düşünüyorum.

    Hangi yaklaşımın daha iyi olduğunu merak ediyorum?

    MyISAM motoru üzerinde bazı tablo tutmak istiyorum nedeni bazıları etrafında 1.000.000 satır var ne kadar spesifik olmak gerekirse. InnoDB'ye dönüştürüldükten sonra bu tablolarda "SELECT COUNT (*)" gibi sorgular için ne kadar yavaş olacağını bilmiyorum.

    Test yapmadım. Anahtara başlamadan önce herhangi birinden tavsiye almayı tercih ederim. Her biri için artıları ve eksileri olan

  • +0

    Neden iki dünyanın en iyisi yok: MySQL PBXT? –

    cevap

    12

    Bu günlerde, özellikle de myisamın tam masa kilitlemesinden muzdarip olduğu yazdığınız yoğun yazma tablolarında InnoDB'yi her zaman kullanıyorum. İşte bir nokta karşılaştırma.

    Nedenleri MyISAM kullanmak:

    • Tablolar seçme-ağır yükler için gerçekten hızlı
    • Tablo düzey kilitleri yazma yoğun çoklu kullanıcı ortamları için onların ölçeklenebilirlik sınırlamaktadır.
    • En küçük disk alanı tüketimi
    • Tam metin endeksi
    • Birleştirilmiş ve sıkıştırılmış tablolar. kilitleme

      • ASİT işlemler
      • Satır seviyesini
      • Tutarlı okur - mükemmel okuma yazma eşzamanlılık ulaşmasını sağlar:

      Nedenleri InnoDB kullanmak.

    • Birincil anahtar kümeleme - bazı durumlarda mükemmel performans sağlar.
    • Yabancı anahtar desteği.
    • Hem dizin hem de veri sayfaları önbelleğe alınabilir.
    • Otomatik kilitlenme kurtarma - MySQL kapamasının kirli olması durumunda InnoDB tabloları hala sabit durumda olacak - MyISAM gibi herhangi bir kontrol/onarım gerektirmeyebilir.
    • Tüm güncellemelerin, işlemsel olmayan depolama motorlarına kıyasla genellikle azalan performans - InnoDB'deki işlem motorundan geçmesi gerekir.

    Yukarıdakiler, artık çalışmıyor gibi görünen this site'dan alınmıştır.

    +1

    COUNT (\ *) ile ilgili takip endişeleriniz iyi yapılandırılmıştır. InnoDB bir tabloda dahili bir satır sayısını tutmaz, bu nedenle bir SELECT COUNT (\ *) işlemi tam bir tablo taraması yapar. Böyle bir sorgu MyISAM ile zaman gerektirmezken, eşdeğer bir InnoDB sorgusu 1mil satırlar için bir kaç saniye sürebilir. Tipik bir çözüm, bir sayılabilir satırın eklenip eklenmediğine bağlı olarak manuel olarak artacağınız ve azaltacağınız başka bir "sayaç tablosu" elde etmektir. Daha fazlasını burada bulabilirsiniz: http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html "TABLO DURUMU GÖSTER" altında. – BrainCore

    2

    . için

    (1) artıları: daha az disk alanı kullanımı, çok daha hızlı salt ağır erişim desenleri

    eksileri için MyISAM: hafıza innodb tampon ve MyISAM anahtar tamponları arasında paylaşılması gerekir. innodb tabloları, myisam muadillerinden yaklaşık 4 kat daha büyük. Programlı kod kilitlenme için kullanılmalıdır.

    Endekslenmiş bir sütunu veya birincil anahtarı değiştiriyorsanız, innodb öğesinin de kilitleneceğini unutmayın.