Nedir InnoDB
ve MyISAM
içinde MySQL
?
Nedir InnoDB
ve MyISAM
içinde MySQL
?
Yanıtlar:
InnoDB
ve MYISAM
depolama motorlarıdır MySQL
.
Bu ikisi kilitleme uygulamasında farklılık gösterir: InnoDB
tablodaki belirli satırı MyISAM
kilitler ve tüm MySQL
tabloyu kilitler .
DB'de tablo oluştururken MYISAM
OR vererek tipi belirtebilirsiniz InnoDB
.
Bir bak bakalım
InnoDB, MySQL AB tarafından dağıtılan mevcut tüm ikili dosyalara standart olarak dahil edilen bir MySQL depolama motorudur. MySQL ile kullanılabilen diğer depolama motorlarına göre ana geliştirmesi, ACID uyumlu işlem desteğidir
MyISAM, 5.5 1'den önceki MySQL ilişkisel veritabanı yönetim sistemi sürümleri için varsayılan depolama motorudur . Eski ISAM kodunu temel alır ancak birçok kullanışlı uzantıya sahiptir. MyISAM'ın en büyük eksikliği, işlem desteğinin olmamasıdır. MySQL 5.5 ve daha sonraki sürümleri, bilgi tutarlılığı kısıtlamaları ve daha yüksek eşzamanlılık sağlamak için InnoDB motoruna geçmiştir.
Depolama motorlarıdır.
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
MyISAM: Varsayılan MySQL depolama motoru ve Web'de, veri ambarında ve diğer uygulama ortamlarında en çok kullanılan motor. MyISAM, tüm MySQL yapılandırmalarında desteklenir ve MySQL'i varsayılan olarak farklı bir tane kullanacak şekilde yapılandırmadıysanız, varsayılan depolama motorudur.
InnoDB: Kullanıcı verilerini korumak için kesinleştirme, geri alma ve çökme kurtarma özelliklerine sahip MySQL için işlem güvenli (ACID uyumlu) bir depolama motoru. InnoDB satır düzeyinde kilitleme (daha kaba taneciklik kilitlerine yükseltmeden) ve Oracle tarzı tutarlı kilitsiz okumalar, çok kullanıcılı eşzamanlılığı ve performansı artırır. InnoDB, birincil anahtarlara dayalı yaygın sorgular için G / Ç'yi azaltmak için kullanıcı verilerini kümelenmiş dizinlerde depolar. Veri bütünlüğünü korumak için InnoDB ayrıca FOREIGN KEY referans bütünlüğü kısıtlamalarını da destekler.
Tablo başına belirli bir depolama motoru belirleyebilmenin MySQL'in temel güçlü yönlerinden biri olduğunu eklemek istedim (kullanım kolaylığı ve ince ayar gerektirmeyen iyi performansın yanı sıra). İşlemlerin gerekli olduğu tüm işlemler için InnoDB'ye bağlı kalmanız yeterlidir. Ancak MyISAM, belirli durumlarda işlemlere ihtiyaç duyulmadığında işleri gerçekten hızlandırabilir ve InnoDB'ye kıyasla daha az disk alanı ve RAM gerektirir.
Bununla birlikte, InnoDB her zaman daha iyi hale geliyor:
MyISAM, verilerin bütünlüğünü korumak için işlemleri izleyen InnoDB'nin aksine ACID'yi takip etmez.
MyISAM eşzamanlı eklemeleri destekler: Bir tablonun veri dosyasının ortasında boş bloklar yoksa, diğer iş parçacıkları tablodan okurken aynı anda yeni satırlar INSERT edebilirsiniz. MySqlDoc
Bu nedenle MyISAM daha hızlıdır ve daha az yer kaplar. Örneğin, MySQL MyISAM Storage Engine, aktarımları desteklemez. MySQL MYISAM'ın kısıtlamaları Concurrent-insert adında bir bit vardır Varsayılan olarak, değişken 1'e ayarlanır ve eşzamanlı eklemeler az önce açıklandığı gibi kullanılır. 0 olarak ayarlanırsa, eşzamanlı eklemeler devre dışı bırakılır. 2 olarak ayarlanırsa, satırları silmiş tablolar için bile tablonun sonundaki eşzamanlı eklemelere izin verilir. Tablonun ortasında delik / silinmiş satır yoksa (eşzamanlı ekleme sırasında), tablonun sonuna aynı anda satır eklemek için bir INSERT deyimi çalıştırılabilir.
Mysql InnoDB'nin varsayılan izolasyon seviyesi "Tekrarlanabilir Okuma" dır. MyISAM için işlem yoktur. InnoDB satır düzeyinde kilitlemeyi kullanırken MyISAM yalnızca tablo düzeyinde kilitlemeyi kullanabilir, bu nedenle InnoDB'nin çökme revovery'si MyISAM'den daha iyidir. Bir zorundadır elle tablo seviyesi kilidi elde bir eşzamanlılık etkilerinden kaçınmak istiyorsa MyISAM içinde.
InnoDB , MySQL'in işlemsel bir depolama motorudur, MyISAM ise işlemsel olmayan bir depolama motorudur. Başka bir deyişle InnoDB, verilerin bütünlüğünü korumak için ACID özelliklerini takip eder, ancak MyISAM ACID özelliklerini izlemez, dolayısıyla verilerin bütünlüğünü koruyamaz.
Bir InnoDB (işlem) tablosunda, işlem değişiklikleri, geri alma gerekliyse kolayca geri alınabilir. Ancak bir MyISAM (işlemsel olmayan) tablosunda yapılan değişiklikler, bir işlemi geri almak gerektiğinde geri alınamaz.
Örneğin, çek hesabınızdan tasarruf hesabına para transfer etmek istiyorsunuz. Bu, 5 sorgu içeren bir işlemle yapılır.
1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;
Diyelim ki, işlem 4. adımda çöküyor. Burada bir InnoDB tablosu kullanılmışsa, geri alma değişiklikleri geri alır ve para kaybetme riskinden kurtulmuş olursunuz. Kelimenin tam anlamıyla, tablo herhangi bir çökmenin farkında değildir, çünkü 5. adım başarıyla yürütülmedikçe değişiklikler tabloya yüklenmeyecektir.
Ancak MyISAM tablosu söz konusu olduğunda, bir geri alma çağrıldığında veya işlemin başarısızlığına yol açan bir kilitlenme olduğunda işlem değişiklikleri geri alınamaz. Bu, işlemin 3. adımda çökmesi durumunda, çek hesabınızdan para çekileceği anlamına gelir. Ancak tasarruf hesabınıza para eklenmezdi.
Örnek nezaket: "High Performance MySQL: Optimization, Backups, and Replication" - Book by Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev ve Vadim Tkachenko
MySQL sunucunuz çöktüğünde, veriler bir dizi MyISAM tablosundan o büyük InnoDB işlem dosyasından çok daha kolay kurtarılabilir. Her MyISAM tablosunun ayrı bir dosyası vardır ve çökme sırasında bu tabloya herhangi bir yazma işlemi yapılmadıysa, tamamen etkilenmeyecektir. InnoDB durumunda, tüm MySQL sunucusunun tüm işlem dosyası yeniden indekslenmelidir veya bir çökmeden sonra ne yaparsa yapsın. Bu oldukça dağınık olabilir.
InnoDB, varsayılan myISAM DEĞİLDİR https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDB, varsayılan MySQL depolama motorudur. Farklı bir varsayılan depolama motoru yapılandırmadıysanız, bir ENGINE = cümlesi olmadan CREATE TABLE ifadesi InnoDB tablosu oluşturur "