架构师_程序员_码农网

K Parolayı al
Kayıt Olun

QQ登录

Başlamak için sadece bir adım

Arama
Görüntüleme:6760|Yanıt: 0
打印 上一主题 下一主题

[Bilgi]MySQL Veritabanı Depolama Motoru MyISAM vs InnoDB Farkı

[Bağlantıyı Kopyala]
MyISAM ve InnoDB
D 跳转到指定楼层
sahibi
发表于 2020-4-13 09:53:49|只看该作者回帖奖励|TersGözat|Okuma Modu
MyISAM ve InnoDB en ünlü ve yaygın olarak kullanılan MySQL depolama motorlarından ikisidir. Bugün, MySQL'de MyISAM ve InnoDB arasındaki farktan ve hangisinin tercih edilmesi gerektiğinden bahsedeceğiz.

MyISAM nedir?

MyISAM, MySQL ilişkisel veritabanı yönetim sisteminin (5.5'ten önce) varsayılan depolama motorudur. Bu MySQL tablo depolama yapısı, eski ISAM kodunu birçok kullanışlı özellikle genişletir. MySQL'in daha yeni sürümlerinde InnoDB motoru, işlemler, referans bütünlüğü ve daha yüksek eşzamanlılık için sağladığı avantajlar nedeniyle MyISAM'in yerini almaya başlamıştır.
Her MyISAM tablosu sabit diskinizdeki üç dosyaya karşılık gelir. Bu üç dosya aynı dosya adına sahiptir, ancak kullanım türlerini belirtmek için farklı uzantıları vardır: .frm dosyası tablo tanımını tutar, ancak bu dosya MyISAM motorunun bir parçası değil, sunucunun bir parçasıdır; .MYD tablo verilerini tutar; ve .MYI tablo için dizin dosyasıdır.

InnoDB nedir?

InnoDB, şu anda MySQL AB'nin yeni sürümleri için standart olan ve tüm ikili kurulumlara dahil edilen ve 5.5'ten sonra varsayılan depolama motoru olan MySQL'in başka bir depolama motorudur. Diğer depolama motorlarına göre avantajları, ACID uyumlu işlemleri (PostgreSQL'e benzer) ve parametre bütünlüğünü (yani yabancı anahtar desteği) desteklemesidir.

Oracle Corporation Ekim 2005'te Innobase'i satın almıştır. Innobase çift kimlik doğrulama lisansı kullanmaktadır. GNU dağıtımı altında dağıtılır, bu da InnoDB'yi ticari yazılıma dahil etmek isteyen diğer grupların bir lisans almasına izin verir.

En popüler depolama motorları MyISAM ve InnoDB'dir. myISAM ve InnoDB arasındaki temel farklar performans ve işlem kontrolüdür. myISAM, daha önceki ISAM'ın (5.0'dan sonra MySQL tarafından artık desteklenmeyen Dizinlenmiş Sıralı Erişim Yöntemi) genişletilmiş bir uygulamasıdır. ISAM, okuma sıklığının yazma sıklığından çok daha fazla olduğu durumlarla başa çıkmak için uygun olacak şekilde tasarlanmıştır, bu nedenle ISAM ve daha sonra MyISAM, TPM hariç, işlem kayıtlarına ihtiyaç duymayan şeyleri desteklemek için düşünülmez, ISAM sorgu verimliliği önemli ölçüde ve çok az bellek tüketimi.
MyISAM, çok sayıda pratik yeni özellik ve ilgili araç sağlamak için zamanla ilerlerken bu tür avantajları miras almıştır. Örneğin, eşzamanlılık kontrolü göz önüne alındığında, tablo düzeyinde kilitler sağlanır ve MyISAM'ın kendisi hata toleransını desteklemese de, hata kurtarma myisamchk aracılığıyla gerçekleştirilebilir. Ve MyISAM her tablonun kendi bağımsız depolama dosyalarını (MYD veri dosyaları ve MYI dizin dosyaları) kullanması nedeniyle, yedekleme ve kurtarma yapmak çok uygundur (kopyalama ve üzerine yazma olabilir), ancak çevrimiçi kurtarmayı da destekler. Diğer depolama motorları ile karşılaştırıldığında, MyISAM tabloları kontrol etmek ve onarmak için araçların çoğuna sahiptir. MyISAM tabloları sıkıştırılabilir ve tam metin (fulltext) aramayı destekler. İşlem güvenli değildirler ve yabancı anahtarları desteklemezler, bu nedenle uygulamanız işlem yapmıyorsa, sadece temel CRUD işlemleriyle uğraşıyorsa, MyISAM seçimdir.
InnoDB, ACID uyumlu işlem desteği sağlamak için MVCC (Multi-Version Concurrency Control) ve satır düzeyinde kilitleme kullanarak yüksek eşzamanlı okuma ve yazmalar için tasarlanmıştır. InnoDB, geri dönüş yetenekleriyle yabancı anahtar referans bütünlüğünü destekler. Buna ek olarak, InnoDB performansı, özellikle büyük miktarda verinin işlenmesi durumunda, resmi sözlerle gerçekten iyidir: InnoDB CPU verimliliği, diğer disk tabanlı ilişkisel veritabanı depolama motoru ile karşılaştırılamaz. Bununla birlikte, InnoDB ve MyISAM farklı olduğundan, Mulit-tablespace desteğinin 4.1 veya sonraki sürümünü kullanmadığınız sürece, InnoDB yedekleme kurtarma biraz sorun yaratır, veri dosyaları her tabloya bağımsız olarak karşılık gelmez. Bunun yerine, paylaşılan bir tablo alanı kullanır ve basit kopyalama ve üzerine yazma yöntemi bunun için geçerli değildir ve MYSQL durdurulduktan sonra verilerin kurtarılması gerekir. Her tablo için ayrı bir tablo alanı dosyasına sahip olan Tablo Başına Tablo Alanlarıd'yi kullanmak çok daha basittir. BDB türüyle aynı özelliklere sahiptir ve yabancı anahtarları da desteklerler. InnoDB tabloları çok hızlıdır ve BDB'den daha zengin özelliklere sahiptir, bu nedenle işlem güvenli bir depolama motoruna ihtiyacınız varsa bunu kullanmanız önerilir.

Genel olarak, işlem desteğine ihtiyacınız varsa ve yüksek eşzamanlı okuma ve yazma sıklığınız varsa InnoDB iyi bir seçimdir. Yüksek bir eşzamanlı okuma/yazma sıklığınız yoksa, aslında BDB'yi düşünebilirsiniz, ancak BDB desteği artık MySQL 5.1 ve sonraki sürümlerde kullanılamayacağından, bu seçenek artık mevcut değildir. Bu seçenek artık mevcut değildir.

InnoDB'de işlemler varsayılan olarak açıktır (autocommit = 0 olarak ayarlanmıştır), bu da her kayıt eklendiğinde InnoDB tipi tablonun bunu ayrı bir işlem olarak ele aldığı anlamına gelir. Dolayısıyla, 10.000 kayıt eklediysek ve işlemi kapatmadıysak, InnoDB türü tablo, toplam ekleme süresiyle başa çıkmak için 10.000 işlem olarak ele alacaktır, bu sürenin çoğu önce işlemi kapatmalı ve sonra eklenmelidir, böylece hızın hızı Heap ve BDB (Berkeley DB) için olduğu gibi, nispeten konuşursak, daha az popülerlik Heap ve BDB'ye (Berkeley DB) gelince, nispeten konuşursak, popülerlik ilk ikisi kadar iyi değildir, ancak bazı durumlarda hala oldukça uygulanabilir Heap depolama motoru, verileri bellekte depolamaktır, çünkü disk I / O için bekleme yoktur, hız son derece hızlıdır. Bununla birlikte, bellek içi bir depolama motoru olduğu için, yapılan herhangi bir değişiklik sunucu yeniden başlatıldıktan sonra kaybolacaktır.Heap test amaçları için iyidir.BDB, MySQL için ilk işlem güvenli depolama motorudur. Berkeley DB veritabanı kütüphanesi üzerine inşa edilmiştir, aynı zamanda işlem açısından da güvenlidir, ancak BDB, InnoDB'den açıkça daha az popülerdir, çünkü MySQL'de işlemsel bir depolama motoru arayan çoğu kişi aynı zamanda MVCC veya satır düzeyinde kilitlemeyi destekleyen bir depolama motoru ararken, BDB yalnızca Sayfa düzeyinde Kilitlemeyi destekler.

InnoDB Motoru

InnoDB, geri almayı destekleyen ve büyük miktarda veriyle çalışırken yüksek performans sağlamak üzere tasarlanmış bir işlemsel depolama motorudur. Verileri ve dizinleri tamponlamak için çalışma zamanında bellekte tampon havuzları oluşturur.

InnoDB Motorunun Faydaları

1, işlem işleme desteği, ACID işlem özellikleri;

2, SQL standardı dört izolasyon seviyesinin uygulanması;

3, satır düzeyinde kilitler ve yabancı anahtar kısıtlamaları için destek;

4, veri kurtarma için işlem günlüğünü kullanabilirsiniz.

5, satır kilitleri için kilit seviyesi, satır kilitleri avantajı, sık tablo değişikliklerinin yüksek eşzamanlılığına uygulanabilir, yüksek eşzamanlılık MyISAM performansından daha iyidir. dezavantajı, sistemin daha fazla tüketmesidir.

6, indeks sadece kendini önbelleğe almakla kalmaz, aynı zamanda verileri de önbelleğe alır, MyISAM ile karşılaştırıldığında daha fazla bellek gerektirir.

InnoDB Motor Dezavantajları

Tablonun satır sayısını kaydetmediğinden, COUNT istatistikleri kullanıldığında tüm tablo taranacaktır.

MyISAM Motoru

MyISAM, 5.5.5'ten önce MySQL'deki varsayılan motordur ve hızlı okumalar için tasarlanmıştır.

MyISAM Motorunun Avantajları

1. Yüksek performanslı okumalar;

2. Tablodaki satır sayısını sakladığından, COUNT istatistikleri kullanılırken tablonun tamamı taranmaz;

MyISAM Motor Dezavantajları

1. tablo kilitleri için kilit seviyesi, tablo kilitlerinin avantajları düşük ek yük, hızlı kilitleme; dezavantajları kilit tanecikliği, kilit darbelerinin meydana gelme olasılığı daha yüksektir, eşzamanlılık yeteneğini karşılamak için düşüktür, bu motor sorgu tabanlı işler için uygundur.

2, bu motor işlemleri desteklemez, yabancı anahtarları desteklemez.

3, INSERT ve UPDATE işlemlerinin tüm tabloyu kilitlemesi gerekir;

4, tablonun satır sayısını depolar, bu nedenle SELECT COUNT(*) FROM TABLE yalnızca tam bir tablo taramasına gerek kalmadan kaydedilen değeri doğrudan okumaya ihtiyaç duyar.

Uygulanabilir Senaryolar

MyISAM aşağıdakiler için uygundur: (1) çok sayıda sayım hesaplaması yapmak; (2) seyrek eklemeler ve çok sık sorgular; (3) işlem yok.

InnoDB şunlar için uygundur: (1) daha yüksek güvenilirlik gereksinimleri veya işlem gerektirme; (2) tablo güncellemeleri ve sorguları oldukça sıktır ve tablo kilitleme fırsatı nispeten büyüktür.

Tablo Karşılaştırması

Nitelikler MyISAM Yığın BDB InnoDB
İşlem Desteklenmiyor Desteklenmiyor Desteklenen Desteklenen
Kilit Granülerliği Masa Kilitleri Masa Kilidi Sayfa Kilidi (sayfa, 8KB) Sıra Kilidi
Depolama Dosya bölme Anısına Tablo başına bir dosya Tablespace
İzolasyon seviyesi Hiçbiri Hiçbiri Read Committed Tümü
Taşınabilir Format Taşınabilir Format N/A Hayır Hayır
Referans Bütünlüğü Hayır Hayır Hayır Hayır
Veri Birincil Anahtar Hayır Hayır Hayır Hayır
MySQL Önbelleğe Alınan Veri Kayıtları Hayır Evet Evet Evet
Kullanılabilirlik Tam Sürüm Tam Sürüm MySQL-Max Tam Sürüm


Bazı ayrıntılı farklılıklar


1. InnoDB, MySQL tarafından 5.6 (deneysel) sonrasında desteklenen FULLTEXT tipi indeksi desteklememektedir.

2、InnoDB bir tablonun satır sayısını kaydetmez, yani tablodan select count() yürütülürken, InnoDB kaç satır olduğunu hesaplamak için tüm tabloyu taramak zorundadır, ancak MyISAM sadece kaydedilen satır sayısını okur. count() deyimi where koşulunu içerdiğinde, iki tablo işleminin aynı olduğunu unutmayın.

3, AUTO_INCREMENT türü alanlar için InnoDB yalnızca alanın indeksini içermelidir, ancak MyISAM tablosunda diğer alanlarla ortak bir indeks oluşturabilirsiniz.

4, DELETE FROM table, InnoDB tabloyu yeniden oluşturmaz, ancak satır satır siler.

5, LOAD TABLE FROM MASTER işlemi InnoDB için çalışmaz, çözüm önce InnoDB tablosunu bir MyISAM tablosuna değiştirmek, verileri içe aktarmak ve ardından InnoDB tablosuna geçmektir, ancak tablonun ek InnoDB özelliklerinin (yabancı anahtarlar gibi) kullanımı için geçerli değildir.

6, Buna ek olarak, InnoDB tablo satır kilidi mutlak değildir, bir SQL deyiminin yürütülmesinde MySQL taramanın kapsamını belirleyemezse, InnoDB tablosu da tüm tabloyu kilitleyecektir.

7, InnoDB tam metin indekslemeyi desteklemezken, MyISAM destekler. Tam metin dizini, ters çevrilmiş dizini oluşturmak için her kelimedeki (devre dışı bırakılmış kelimeler hariç) char, varchar ve metni ifade eder.MyISAM tam metin dizini kullanışlı değildir, çünkü Çince kelimeyi desteklemez, kullanıcı kelimesi tarafından boş alana eklenmeli ve ardından veri tablosuna yazılmalıdır ve 4'ten az Çince karakter göz ardı edilecek ve devre dışı bırakılmış kelimeler aynı kelime olarak.





Önceki:Montaj laboratuvarı soruları
Sonraki:int türünden varchar türüne sql ifadesi
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Geri gönderi yapabilmeniz için giriş yapmanız gerekmektedir Giriş Yap | Kayıt Ol

İntegral kurallarının bu versiyonu


YASAL UYARI: Code Farmer ağı tarafından yayınlanan tüm yazılım, programlama materyalleri veya makaleler çalışma ve araştırma amaçlarıyla sınırlıdır; yukarıdaki içerik ticari veya yasadışı amaçlarla kullanılamaz, aksi takdirde tüm sonuçlardan lütfen kullanıcı sorumludur. Bu site bilgileri ağdan alınmıştır, telif hakkı anlaşmazlığının bu site ile hiçbir ilgisi yoktur. Yukarıdaki içeriği indirdikten sonraki 24 saat içinde bilgisayarınızdan tamamen kaldırmalısınız. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kaydı satın alın ve daha iyi orijinal hizmet alın. Herhangi bir ihlal varsa, bununla ilgilenmek için lütfen bizimle e-posta yoluyla iletişime geçin.

Posta To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 21:33

Hızlı YanıtBaşadön Listeye dön