InnoDB ve MyISAM arasındaki ana farklar nelerdir?


180

InnoDB ve MyISAM arasındaki ana farklar nelerdir?

+13

Bir veritabanı motoru istiyorsanız, InnoDB kullanın.[İkisini karşılaştıramazsınız] (https://jeremystein.com/journal/innodb-versus-myisam-no-comparison/). 10 oca. 132013-01-10 15:12:50

112

Gördüğüm ilk büyük fark, InnoDB'nin satır düzeyinde kilit uygulamasına karşın, MyISAM yalnızca masa düzeyinde bir kilit yapabiliyor.InnoDB'de daha iyi kaza kurtarma bulacaksınız.Ancak, sahip değilFULLTEXTMyISAM'de olduğu gibi v5.6'ya kadar indeksleri ara.InnoDB aynı zamanda işlemleri, yabancı anahtarları ve ilişki kısıtlamalarını da uygularken, MyISAM bunu yapmaz.

Liste biraz daha ileri gidebilir.Yine de, her ikisi de kendi lehlerine benzersiz avantajları ve birbirlerine karşı dezavantajları vardır.Her biri bazı senaryolarda diğerinden daha uygundur.

Yani özetlemek için (TL; DR):

  • InnoDB'de satır düzeyinde kilitleme var, MyISAM yalnızca tam masa düzeyinde kilitleme yapabilir.
  • InnoDB daha iyi kaza kurtarma özelliğine sahiptir.
  • MyISAM varFULLTEXTArama dizinleri, InnoDB MySQL 5.6 (Şubat 2013) 'e kadar sürmedi.
  • InnoDB işlemleri, yabancı anahtarları ve ilişki kısıtlamalarını uygular, MyISAM yapmaz.
  0

sevgili efendim, öyleyse sonuçta ne kullanmalı?MyISAM veya InnoDB?tamamen karıştı ... web sitem mysql kullanıyor ve buna karar vermem gerekiyor. 30 ağu. 122012-08-30 11:44:30

+2

Uygulamaya bağlı olarak, ihtiyacınız olan özelliklerin bir listesini yazın (örn. tam metin arama, yabancı anahtarlar ...) ve bir tanesine karar vermeye çalışın (her bir özelliği derecelendirmeye çalışın ve ardından puanı sayın).hepsine sahip olamayacaksın ama cadı özelliğine en çok ihtiyaç duyulduğuna karar vermek size kalmış. 30 ağu. 122012-08-30 12:14:29

+2

Açıklama için gönderisini düzenledim. 23 tem. 132013-07-23 06:24:14

+1

@MathiasLykkegaardLorenzen teşekkürler, bu bizim stackexchange'i sevmemizin nedenlerinden biri. 25 tem. 132013-07-25 23:37:26

  0

Sürüm 5.6.4'ten itibaren InnoDB 'FULLTEXT 'aramasını desteklemektedir.https://dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html 02 kas. 142014-11-02 04:34:25

  0

InnoDB otomatik artış değerlerini hatırlamıyor (yeniden başlatmayı unutuyor). 10 şub. 182018-02-10 03:26:03

  0

@sqlchild, Web sunucusu istemciden veri alıyorsa, InnoDB'yi daha iyi kullanın, yabancı anahtar özelliği veritabanınızı tutarlı bir durumda tutmak için esastır. 03 mar. 182018-03-03 19:08:23


16

Tecrübelerime göre, en önemli fark, her motorun kilitleme yöntemini kullanma şeklidir.InnoDB satır kilitlemeyi kullanırken, MyISAM tablo kilitlemeyi kullanır.Genel bir kural olarak, ağır tablolar yazmak için InnoDB'yi ve ağır tablolar okumak için MyISAM'i kullanıyorum.

Diğer önemli farklılıklar şunlardır:

  1. InnoDB destek işlemleri ve yabancı anahtarlar.MyISAM yapmaz.
  2. MyISAM, tam metin indekslemesini kullanır.
  3. MyISAM veri bütünlüğünü zorlamak için kötü bir iş yapıyor.

7

MyISAM'ı MySQL için 'varsayılan' tablo seçeneği olarak görme eğilimindeyim, bu yüzden InnoDB kullanıcılarının çoğu için farklılıkları işaret edeceğim

  • Satır seviye kilitleme
  • Yabancı anahtar yaptırımı
  • İşlem desteği
  • Yüksek kullanımlı sistemlerde performans düşmesi
+4

En son MySQL sürümü dışında MyISAM artık varsayılan motor olarak kullanılmıyor.5.5'te varsayılanı InnoDB :) olarak değiştirdiler.Ve genel olarak InnoDB'nin sadece 'performans kazancı' aldığına dair genellemeye katılmıyorum.Uygun indeksleme ve iyi yapılandırılmış bellek ayarlarına sahip iyi tasarlanmış InnoDB tabloları, bir InnoDB tablosunun MyISAM'da olduğu gibi aynı şemayı gerçekleştirmesini sağlayabilir 24 haz. 112011-06-24 13:44:30

+3

Pek çok "yüksek kullanım" durumunda InnoDB aslında [daha iyi] performans gösteriyor (http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/) MyISAM.MyISAM, belirli bir problem için özel bir araçtır, InnoDB çoğu durumda size daha iyi hizmet verecektir (bu yüzden neden MySQL ekibinin bunu varsayılan motor yaptı?).Çünkü MyISAM, MySQL topluluğunun InnoDB olgunlaşmasından sonra bile varsayılan olarak MyISAM'ı kullanma alışkanlığı haline getirdiği uzun süredir tek motordu. 15 ağu. 112011-08-15 19:53:08

+2

InnoDB için FULLTEXT araması, MySQL 5.6 geliştirme döngüsü boyunca kısmen eklendi.[Alıntı yapılan URL] (http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html) artık InnoDB'yi de kapsamaktadır. 20 ara. 122012-12-20 06:52:59


26

Bir şey daha: InnoDB tablolarını sadece dosya sisteminin anlık görüntüsünü alarak yedekleyebilirsiniz.Yedekleme MyISAM, mysqldump kullanımını gerektirir ve tutarlı olması garanti edilmez (örn. Bir ebeveyn ve çocuk masasına yerleştirirseniz, yedeklemenizde yalnızca çocuk masasının sırasını bulabilirsiniz).

Temel olarak, verilerin başka bir kopyasına sahipseniz ve yalnızca MySQL'de önbelleğe alıyorsanız, örneğin bir PHP web sitesinden standart bir erişim yoluna izin vermek için, o zaman MyISAM iyidir (yani, sorgulama için düz bir CSV dosyasından veya bir günlük dosyasından daha iyidir. eşzamanlı erişim).Veri tabanı, verilerin gerçek "ana kopyası" ise,INSERTveUPDATEKullanıcılardan gelen gerçek verileri kullanarak, InnoDB'den başka bir şey kullanmak aptalcadır, herhangi bir ölçekte MyISAM güvenilmezdir ve yönetimi zordur;myisamchkzamanın yarısı, performans kazanımlarını göz ardı ederek ...

(Kişisel deneyimim: MyISAM'de 2 terabaytlık bir DB).


64

Henüz belirtilmeyen bir diğer önemli fark, her depolama motoruna yönelik önbelleğe alma işleminin nasıl yapıldığıdır.

MyISAM

Kullanılan ana mekanizma, anahtar önbellektir.Yalnızca .MYI dosyalarındaki dizin sayfalarını önbelleğe alır.Anahtar önbelleğinizi boyutlandırmak için aşağıdaki sorguyu çalıştırın:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Bu, MyISAM Anahtar Önbelleği için Önerilen Ayarı verir (key_buffer_size) mevcut veri kümenizi verilen (the query will cap the recommendation at 4G (4096M).32 bit işletim sistemi için 4 GB sınırdır.64 bit için 8 GB.

InnoDB'nin

Kullanılan ana mekanizma InnoDB Buffer Pool'dur.Erişilen InnoDB tablolarındaki verileri ve dizin sayfalarını önbelleğe alır.InnoDB Tampon Havuzunuzu boyutlandırmak için aşağıdaki sorguyu çalıştırın:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Bu InnoDB Tampon Havuzunun büyüklüğü için Tavsiye Edilen Ayarı verecektir (innodb_buffer_pool_size) mevcut veri setinizi verilen.

InnoDB Günlük Dosyalarını (ib_logfile0 ve ib_logfile1) yeniden boyutlandırmayı unutmayın.MySQL Kaynak Kodu, tüm InnoDB Günlük Dosyalarının birleştirilmiş boyutlarının bir kapağını <4G (4096M) olmalıdır. Yalnızca iki günlük dosyası verilen basitlik uğruna, bunları nasıl boyutlandırabilirsiniz:

  • Adım 1) innodb_log_file_size = NNN /etc/my.cnf(NNN değerinin% 25'inin innodb_buffer_pool_size veya 2047M olması gerekir, hangisi daha küçükse)
  • Adım 2)service mysql stop
  • Aşama 3)rm /var/log/mysql/ib_logfile[01]
  • 4. Adım)service mysql start(ib_logfile0 ve ib_logfile1 yeniden oluşturulur)

UYARI

Her iki sorgunun da sonunda bir Satır İçi Sorgu(SELECT 2 PowerOf1024)B

  • (SELECT 0 PowerOf1024)Bayt cinsinden ayarı verir
  • (SELECT 1 PowerOf1024)Kilobayt olarak ayarı verir
  • (SELECT 2 PowerOf1024)Megabaytlarda Ayarı verir
  • (SELECT 3 PowerOf1024)Gigabaytlardaki Ayarı verir
  • 0'dan küçük veya 3'ten büyük olan hiçbir güç kabul edilmez

SONSÖZ

Sağduyu için hiçbir alternatif yoktur.Sınırlı belleğiniz, depolama motorlarının bir karışımını veya bunların bir kombinasyonunu varsa, farklı senaryolar için ayarlama yapmanız gerekir.

  • 2GB RAM ve 16GB InnoDB'niz varsa, 512M'yi innodb_buffer_pool olarak tahsis edin.
  • 2GB RAM ve 4GB MyISAM Dizininiz varsa, 512M'yi key_buffer_size olarak tahsis edin.
  • 2GB RAM ve 4GB MyISAM Indexes ve 16GB InnoDB'niz varsa, 512M'yi key_buffer_size ve 512M'yi innodb_buffer_pool_size olarak tahsis edin.

Olası senaryolar sonsuzdur !!!

Unutmayın, ne için ayırdığınız, DB Bağlantıları ve İşletim Sistemi için yeterli RAM bırakın.

  0

Bunlar kötü formüller! 23 haz. 112011-06-23 00:06:29

  0

(ups - unutmaya devam et paragraflara sahip olamaz) ... ... bir "cevap" ekleyeceğim. 23 haz. 112011-06-23 00:07:21

  0

Aslında düşük bellek ortamlarıyla ilgili cevabı için @Rick'e +1 verdim.Cevabım, URL'sini cevabından kullanıyor olsa bile, doğru olduğu doğrulandı.Buradan tüm cevapları tam bağlamında değerlendirmek için DBA.SE topluluğuna bırakıyorum.Teşekkür ederim !!! 23 haz. 112011-06-23 02:51:42

  0

Rolando'nun önbellek boyutları için formülleri pratik değildir.- 2 gücüne gerek yok.- 32-bit işletim sisteminde 4GB imkansız - Vb .) 23 haz. 112011-06-23 00:13:03

+2

@Rick: 2'nin yetkileri, cevapları farklı birimler halinde göstermesi gerekiyordu.Yapma (SELECT 2 PowerOfTwo) Yanıtın Ekranını MB olarak ayarlar.Yapma (SELECT 3 PowerOfTwo) Ekranı GB olarak ayarlar.(SEÇ 1 PowerOfTwo) KB cinsinden görüntüler.(SEÇ 0 PowerOfTwo) Bayt olarak görüntülenir.(SELECT 2 PowerOfTwo) öyle yapar.Bu yüzden SADECE EKRANMAK gerekir, mimaride herhangi bir varsayılan değer empoze etmeyin. 23 haz. 112011-06-23 02:25:59

  0

@Rick: MySQL Web Sitesi Belgeleri, 32 Bit İşletim Sistemi için Maksimum 4 GB diyor: key_buffer_size için izin verilen maksimum ayar 32 bit platformlarda 4 GB'dir.64 bit platformlar için 4 GB'den büyük değerlere izin verilir.İşletim sisteminiz veya donanım platformunuzun getirdiği fiziksel RAM ve işlem başına RAM sınırlarınıza bağlı olarak, etkili maksimum boyut daha düşük olabilir.Bu değişkenin değeri istenen bellek miktarını gösterir.Dahili olarak, sunucu bu miktara kadar mümkün olduğu kadar bellek ayırır, ancak gerçek ayırma daha az olabilir. 23 haz. 112011-06-23 02:30:58

  0

@Rick: Bu URL'nin söylediği şey (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_key_buffer_size), doğrudan MySQL Belgesinden.Dokümantasyon yanlışsa, lütfen MySQL'i (eh Oracle) bilgilendirin. 23 haz. 112011-06-23 02:32:19

  0

@Rick: URL’niz bile (http://mysql.rjweb.org/doc.php/memory) açıkça şunu söylüyor: Birincisi, işletim sistemi (ve donanım?) 4GB’nın tümünü kullanmanıza izin vermeyebilir. var.4GB'tan fazla RAM’iniz varsa, 4GB’ın üzerindeki fazlalara _totally_ erişilemez ve kullanılamaz.Bu tam olarak 4GB'ın MySQL'in dokümantasyonundan ve alıntı yaptığınız kendi URL adresinden doğru olduğunu. 23 haz. 112011-06-23 02:37:15

+2

@Rick: Ne biliyor musun?Aslında size iki büyük nedenden ötürü bir + 1 vereceğim.1) URL’niz, cevabımın doğru olduğunu, 4GB’nin key_buffer_size öğesine atanacak en büyük sayı olduğunu doğruladı.2) Yanıtınız, URL’nizle birlikte, çok düşük bellek kullanan makineler için anlamlıdır.Kredinin vadesi geldiğinde kredi vereceğim. 23 haz. 112011-06-23 02:41:27

  0

@Rick: Ayrıntılı olmak istemem ama cevabımdaki son notumu okumuş olsaydınız, innodb_buffer_pool_size ve key_buffer_size için 512 MB kullandığımı açıkça belirtirdim.Düşük bellek ortamlı kişilerle muhafazakar olmayı deniyorum.Benim gibi formüllerin mutlak olmadığının farkındayım. 23 haz. 112011-06-23 02:48:45


42

InnoDB şunları sunmaktadır:

  • ACID işlemleri
  • sıra düzeyinde kilitleme
  • yabancı anahtar kısıtlamaları
  • otomatik kilitlenme kurtarma
  • masa sıkıştırma (okuma/yazma)
  • mekansal veri türleri (mekansal indeks yok)

InnoDB’de TEXT ve BLOB hariç tüm veriler arka arkaya en fazla 8.000 bayt alabilir.Tam metin indeksleme, MySQL 5.6 (Şubat 2013) tarihine kadar InnoDB'de mevcut değildir.InnoDB içindeCOUNT(*)s (ne zamanWHERE,GROUP BYveyaJOINkullanılmaz) satır sayısı dahili olarak saklanmadığından MyISAM'den daha yavaş yürütülür.InnoDB hem veri hem de indeksleri bir dosyada saklar.InnoDB, verileri ve dizinleri önbelleğe almak için bir arabellek havuzu kullanır.

MyISAM şunları sunar:

  • hızlıCOUNT(*)s (ne zamanWHERE,GROUP BYveyaJOINKullanılmıyor)
  • tam metin indeksleme (güncelleme: MySQL 5.6'dan InnoDB'de desteklenir)
  • daha küçük disk alanı
  • Çok yüksek masa sıkıştırma (sadece okunur)
  • mekansal veri türleri ve dizinler (R-tree) (güncelleme: MySQL 5.7'den InnoDB'de desteklenir)

MyISAM'de masa düzeyinde kilitleme var, ancak satır düzeyinde kilitleme yok.İşlem yokOtomatik kilitlenme kurtarması yok, ancak onarım masası işlevi sunuyor.Yabancı anahtar kısıtlamaları yoktur.MyISAM masaları genel olarak InnoDB masalarına kıyasla diskte daha küçük boyuttadır.Gerekirse, myisampack ile sıkıştırarak, ancak salt okunur hale geldiğinde, MyISAM tablolarının boyutları daha da azaltılabilir.MyISAM, dizinleri bir dosyada ve verileri başka bir dosyada depolar.MyISAM, dizinleri önbelleğe almak için anahtar arabellekleri kullanır ve veri önbellek yönetimini işletim sistemine bırakır.

Genel olarak InnoDB'yi çoğu amaç için ve MyISAM'ı yalnızca özel kullanımlar için öneriyorum.InnoDB şimdi yeni MySQL sürümlerinde varsayılan motordur.

+2

Cevabınızı okudum ve buradaki diğerleriyle karşılaştırdım.BLOB'lardan bahseden sadece sizindir.Genellikle verilenler için alınırlar.Aynı zamanda, hızlı okunabilen MyISAM masalarının asıl kahramanlarından biri olan myisampack'ten bahseden tek kişi.Bugünki +1 bugün !!! 23 ağu. 112011-08-23 03:45:37


3

MyISAM

MYISAM, masa seviyesinde kilitleme sağlar, FULLTEXT arama yapar.MYISAM, tüm depolama motorlarını en esnek AUTO_INCREMENTED sütununa sahiptir. MISIS işlemlerini desteklemez.

InnoDB

INNODB işlem güvenli bir depolama motorudur. NODB, taahhüt, geri alma ve kilitlenme kurtarma özelliklerine sahiptir. NODB, yabancı anahtar başvuru bütünlüğünü destekler.


4

MySQL 5.6 değişikliklerini içeriyor

INNODB DEPOLAMA MOTORU:

  • Tam ACID (atomik, tutarlılık, izolasyon, dayanıklılık) uyumluluğu sağlar.Çoklu sürüm oluşturma, işlemleri diğerlerinden ayırmak için kullanılır.
  • InnoDB, MySQL sunucusunun veya sunucunun üzerinde çalıştığı ana bilgisayarın çökmesinden sonra otomatik kurtarma sağlar.
  • InnoDB, basamaklı silmeler ve güncellemeler dahil yabancı anahtarları ve başvuru bütünlüğünü destekler.
  • MySQL 5.6, varsayılan depolama motoru olarak tümüyle entegre olan InnoDB platformuna dayanıyor
  • Kalıcı Optimize Edici İstatistikleri: InnoDB endeks istatistiklerinin doğruluğunu ve MySQL yeniden başlatmalarında tutarlılığı sağlar.
  • InnoDB masa önbelleğini budama:Çok sayıda tablo bulunan sistemlerde bellek yükünü kolaylaştırmak için InnoDB şimdi açılan bir tabloyla ilişkili belleği boşaltır.Bir LRU algoritması, erişilmeden en uzun süren tabloları seçer.
  • Tam metin aramayı destekler:Özel bir dizin olan FULLTEXT dizini, InnoDB'nin metin tabanlı sütunları ve içerdikleri kelimeleri içeren sorguları ve DML işlemlerini gerçekleştirmesine yardımcı olur.Bu endeksler fiziksel olarak InnoDB tablolarının tamamı olarak temsil edilir.
  • InnoDB, Tam Metin Arama'da MyISAM'dan çok daha hızlı görünüyor

Yani, kullanmanın hiçbir anlamı yokMyISAMMotor zaten 5.6’ya yükseltildiyse, o zaman MySQL 5.6’ya yükseltmeyi beklemeyin.

InnoDB VS MyISAM performance using MySQL 5.6


17

Oyuna biraz geç kaldık ... ama işte MYISAM ile InnoDB arasındaki büyük farkları ayrıntılarıyla anlatan, oldukça kapsamlı bir post I wrote a few months back .Bir cuppa (ve belki bisküvi) kapın ve tadını çıkarın.


MyISAM ve InnoDB arasındaki en büyük fark, referans bütünlüğü ve işlemlerdir.Kilitleme, geri alma ve tam metin aramaları gibi başka farklar da vardır.

Bilgi tutarlılığı

Referans bütünlüğü, tablolar arasındaki ilişkilerin tutarlı kalmasını sağlar.Daha spesifik olarak, bu, bir tablonun (örn. Listeler) farklı bir tabloya işaret eden yabancı bir anahtara (örn. Ürün Kimliği) sahip olması, örneğin sivri masaya güncellemeler veya silmeler meydana geldiğinde, bu değişiklikler bağlantıya basamaklanır; tablo.Örneğimizde, bir ürün yeniden adlandırılırsa, bağlantı tablosunun yabancı anahtarları da güncellenir;Bir ürün 'Ürünler' tablosundan silinirse, silinen girişi gösteren tüm listeler de silinir.Ayrıca, herhangi bir yeni liste, geçerli bir girişe işaret eden yabancı anahtarlara sahip olmalıdır.

InnoDB ilişkisel bir DBMS'dir (RDBMS) ve bu nedenle referans bütünlüğü vardır, MyISAM ise değildir.

İşlemler ve Atomisite

Tablodaki veriler, SELECT, INSERT, UPDATE ve DELETE gibi Data Manipulation Language (DML) ifadeleri kullanılarak yönetilir.Bir işlem grubu iki ya da daha fazla DML ifadesini tek bir iş biriminde bir araya getirir, böylece ya tüm birim uygulanır ya da hiçbiri olmaz.

MyISAM, InnoDB'nin yaptığı işlemleri desteklemiyor.

Bir MyISAM tablosu kullanırken bir işlem kesilirse, işlem derhal iptal edilir ve işlem tamamlanmasa bile etkilenen satırlar (veya her satırdaki veriler) etkilenmeye devam eder.

Bir InnoDB tablosu kullanırken bir işlem kesilirse, atomlu olan işlemleri kullandığından, tamamlanmayan hiçbir işlem gerçekleştirilmediğinden, işlem yapılmaz.

Tablo kilitleme vs Satır kilitleme

Bir sorgu bir MyISAM tablosuna karşı çalıştığında, sorguladığı tüm tablo kilitlenir.Bu, sonraki sorguların yalnızca geçerli soru bittikten sonra gerçekleştirileceği anlamına gelir.Büyük bir masa okuyorsanız ve/veya sık sık okuma ve yazma işlemleri varsa, bu büyük bir sorgu biriktirme anlamına gelebilir.

Bir InnoDB tablosuna karşı bir sorgu çalıştığında, yalnızca ilgili satırlar kilitlenir, tablonun geri kalanı CRUD işlemleri için kullanılabilir durumda kalır.Bu, aynı satırı kullanmaması koşuluyla sorguların aynı masada aynı anda çalışabileceği anlamına gelir.

InnoDB'deki bu özellik eşzamanlılık olarak bilinir.Eşzamanlılık ne kadar büyük olursa olsun, çekirdek tabloları arasında geçiş yapmanın bir ek yükü olması ve belirli bir tablo aralığına uygulanan önemli bir dezavantajı vardır ve sunucunun durmasını önlemek için çekirdek iş parçacıkları için bir sınır belirlemelisiniz. .

İşlemler ve Geri Alma

MyISAM'da bir işlem gerçekleştirdiğinizde, değişiklikler ayarlanır;InnoDB’de bu değişiklikler geri alınabilir.İşlemleri kontrol etmek için kullanılan en yaygın komutlar COMMIT, ROLLBACK ve SAVEPOINT'tir.1. KOMİTE - birden fazla DML işlemi yazabilirsiniz, ancak değişiklikler yalnızca KOMİTE yapıldığında kaydedilecektir. 2. ROLLBACK - henüz tamamlanmamış herhangi bir işlemi atabilirsiniz. 3. SAVEPOINT - ROLLBACK işleminin geri alınabileceği işlemler

Güvenilirlik

MyISAM veri bütünlüğü sağlamaz - Donanım hataları, temiz olmayan kapanmalar ve iptal edilen işlemler verilerin bozulmasına neden olabilir.Bu, dizinlerin ve tabloların tam olarak onarılmasını veya yeniden oluşturulmasını gerektirir.

InnoDB ise işlem bozulmalarını önlemek için işlem günlüğü, çift yazma tamponu ve otomatik kontrol ve doğrulama kullanır.InnoDB herhangi bir değişiklik yapmadan önce, işlemden önceki verileri ibdata1 adlı bir sistem tablo dosyasına kaydeder.Bir çökme olursa, InnoDB bu kayıtların tekrarı aracılığıyla otomatik olarak çalışacaktır.

FULLTEXT İndeksleme

InnoDB, MySQL 5.6.4 sürümüne kadar FULLTEXT endekslemeyi desteklemiyor.Bu yazının yazımından itibaren, birçok paylaşılan barındırma sağlayıcısının MySQL sürümü hala 5.6.4'ün altındadır, yani FULLTEXT endekslemesi InnoDB tabloları için desteklenmez.

Ancak, bu MyISAM kullanmak için geçerli bir neden değildir.MySQL'in güncel sürümlerini destekleyen bir barındırma sağlayıcısına geçmek en iyisidir.FULLTEXT indeksleme kullanan bir MyISAM tablosu, InnoDB tablosuna dönüştürülemez.

Sonuç

Sonuç olarak, InnoDB seçtiğiniz varsayılan depolama motorunuz olmalıdır.Belirli bir ihtiyaca cevap verdiklerinde MyISAM veya diğer veri türlerini seçin.


1

MyISAM

MyISAM, MySQL için bir depolama motorudur.MySQL 5.5'ten önce MySQL için varsayılan depolama motoruydu.Eski ISAM depolama motoruna dayanmaktadır. MyISAM, yoğun okuma işlemleri olan ve az sayıda yazma olan veya hiç olmayan ortamlar için optimize edilmiştir.MyISAM'ın hızlı okumaya izin vermesinin nedeni, indekslerinin yapısıdır: her giriş, veri dosyasındaki bir kaydı gösterir ve işaretçi dosyanın başlangıcından ofsetlenir.Bu yolla özellikle format SABİT olarak kaydedildiğinde, kayıtlar hızlı bir şekilde okunabilir.Böylece, sıralar sabit uzunluktadır.Birinin MyISAM'ı tercih edebileceği tipik bir alan veri ambarıdır, çünkü çok büyük tablolarda sorgulamalar içerir ve bu tür tabloların güncellenmesi veritabanı kullanılmadığında (genellikle gece) yapılır.Ekler de kolaydır, çünkü veri dosyasının sonuna yeni satırlar eklenir.Bununla birlikte, silme ve güncelleme işlemleri daha sorunludur: silme işlemlerinde boşluk kalması gerekir; aksi takdirde satır ofsetleri değişir;Aynısı, satırların uzunluğu kısaldıkça güncellemeler için de geçerlidir;güncelleme, satırı daha uzun yaparsa, satır parçalanır.Satırları birleştirmek ve boş alan talep etmek içinOPTIMIZE TABLEkomut çalıştırılmalıdır.Bu basit mekanizma nedeniyle, genellikle MyISAM endeksi istatistikleri oldukça doğrudur.MyISAM'ın diğer büyük dezavantajları, işlem desteğinin ve yabancı anahtarların olmamasıdır.

InnoDB'nin

InnoDB MySQL için bir depolama motorudur.MySQL 5.5 ve sonraki sürümleri varsayılan olarak kullanır.Standart ACID uyumlu işlem özelliklerini ve yabancı anahtar desteğini (Bildirimsel Bütünlük Bütünlüğü) sağlar.SQL ve XA işlemlerini, tablo alanlarını uygular,FULLTEXTOpenGIS standardını izleyen endeksler ve mekansal işlemler. Bazı OEM versiyonları hariç olmak üzere MySQL AB tarafından dağıtılan çoğu ikili dosyada standart olarak bulunur.Yazılım, Oracle Corporation tarafından çift lisanslıdır;GNU Genel Kamu Lisansı altında dağıtılmaktadır, ancak InnoDB'yi tescilli yazılımda birleştirmek isteyen taraflara da lisans verilebilmektedir.

çatallar

MariaDB, "MyISAM'a çarpmaya karşı güvenli bir alternatif" olarak tanımlanan Aria adlı bir depolama motoruna sahip.MariaDB ve Percona Server, varsayılan olarak XtraDB adlı bir InnoDB çatalı kullanır.XtraDB, Percona tarafından sağlanır.Oracle InnoDB'nin değişiklikleri düzenli olarak XtraDB'ye aktarılır ve bazı hata düzeltmeleri ve ekstra özellikler eklenir.