InnoDB ve MyISAM arasındaki ana farklar nelerdir?


245

InnoDB ve MyISAM arasındaki ana farklar nelerdir?


23
Bir veritabanı motoru istiyorsanız, InnoDB kullanın. İkisini karşılaştıramazsın .
Jeremy Stein,

Aşağıdaki cevapların birçoğu doğru olsa da, bir şeyleri net bir şekilde azaltmıyorlar, IMHO. Bu site ve ana nokta: InnoDB satır düzeyinde kilitleme, MyISAM masa düzeyinde kilitlemedir. Bu, genel olarak konuşursak, MyISAM'in OLAP (analitik, çoğunlukla okur) için daha iyi olacağı ve InnoDB'nin OLTP için daha iyi olacağı (işlemler, çoğunlukla yazan veya en azından birçok yazar) olacaktır.
Mike Williamson

Yanıtlar:


159

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, FULLTEXTMyISAM'de olduğu gibi v5.6'ya kadar arama dizinleri yoktur. 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.

Özetlemek gerekirse ( 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'in FULLTEXTarama endeksleri var, InnoDB MySQL 5.6 (Şubat 2013) tarihine kadar yapmadı.
  • InnoDB işlemleri, yabancı anahtarları ve ilişki kısıtlamalarını uygular, MyISAM yapmaz.

sevgili efendim, öyleyse sonuçta ne kullanmalı? MyISAM veya InnoDB? Kafam karıştı ... web sitem mysql kullanıyor ve buna karar vermem gerekiyor.
sqlchild

3
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ış.
poelinca

2
Açıklama için gönderisini düzenledim.
Mathias Lykkegaard Lorenzen

1
@MathiasLykkegaardLorenzen teşekkürler, bu bizim
stackexchange'i sevmemizin

version 5.6.4InnoDB itibariyle FULLTEXTaramayı destekliyor . dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html
daydreamer

85

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, geçerli veri setinizi (MyGLK Anahtar Önbelleği için Önerilen Ayar ( key_buffer_size ) için Geçerli Ayarı verecektir ( sorgu 4G'de (4096M) öneriyi sınırlar. 32-bit işletim sistemi için 4GB sınırdır. 64-bit, 8GB'tır.

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, mevcut veri setinizi verilen InnoDB Tampon Havuzunun ( innodb_buffer_pool_size ) boyutu için Önerilen Ayarı verecektir .

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. Basitlik uğruna, sadece iki günlük dosyası verilen, onları nasıl boyutlandırabilirsiniz:

  • Adım 1) /etc/my.cnf'e innodb_log_file_size = NNN ekleyin (NNN, hangodu daha küçükse, innodb_buffer_pool_size veya 2047M’nin% 25’i olmalıdır)
  • Adım 2) service mysql stop
  • Aşama 3) rm /var/log/mysql/ib_logfile[01]
  • Adım 4) service mysql start(ib_logfile0 ve ib_logfile1 yeniden oluşturulur)

UYARI

Her iki sorgunun da sonunda bir Satır iç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 Dizinleriniz varsa, 512M'yi key_buffer_size olarak tahsis edin.
  • 2GB RAM ve 4GB MyISAM Indexes ve 16GB InnoDB kullanıyorsanız, 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.


Bunlar kötü formüller!
Rick James

(ups - unutmaya devam et paragraflara sahip olamaz) ... ... bir "cevap" ekleyeceğim.
Rick James,

Rolando'nun önbellek boyutları için formülleri pratik değildir. - 2 gücüne gerek yok. - Vb İşte bunları ayarlamak için ne benim yıkık - 32 bit işletim sisteminde 4GB imkansızdır: mysql.rjweb.org/doc.php/memory (. Bu bellek kullanımını etkileyen çeşitli diğer ayarları adresleri)
Rick James

2
@Rick: 2'nin güçleri, cevapları farklı birimler halinde göstermeye niyetli. 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.
RolandoMySQLDBA

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, makinenin çok düşük belleği için anlamlıdır. Kredinin vadesi geldiğinde kredi vereceğim.
RolandoMySQLDBA

60

InnoDB şunları sunmaktadır:

  • ACID işlemleri
  • satır 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 COUNT(*)s (zaman WHERE, GROUP BYya da JOINkullanılmaz) satır sayısı içten depolanmadığı için MyISAM içinde daha yavaş yürütün. 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 (zaman WHERE, GROUP BYveya JOINkullanılmaz)
  • 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 yok Otomatik 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 masalarının boyutları daha da azaltılabilirdi. 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.


5
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 !!!
RolandoMySQLDBA 23:11

2
Örnek, tabloyu tamamen değiştirerek düzenli olarak güncelleme yapabileceğiniz, salt okunur bir tablo olabilir.
dabest1 0

30

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). Veritabanının verinin asıl "ana kopyası" olması durumunda , kullanıcılardan gerçek veriler kullanıyorsanız INSERTve UPDATEkullanıyorsanız, InnoDB dışında bir şey kullanmak aptalcadır, herhangi bir ölçekte MyISAM güvenilmez ve yönetimi zordur. 'yapıyor olacak myisamchkherhangi bir performans kazancı negating yarım saat ...

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


29

Oyuna biraz geç kaldım ... ama işte size oldukça geniş bir yazı yazdım . 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 (örneğin Ürün Kimliği) sahip olması (örn. Ürünler) anlamına gelir, sivri tabanda güncelleme veya silme 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 bu yabancı anahtara 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 durdurulur 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 gerçekleştirilmez.

Tablo kilitleme vs Satır kilitleme

Bir sorgu bir MyISAM masasına 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 okuma ve yazma işlemleri varsa, bu çok büyük bir sorgu birikimi 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, sorguların aynı satırı kullanmaması koşuluyla 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 iplikleri 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 - listesindeki bir noktayı belirler. 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şlemlerden ö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 indekslemesi 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 ihtiyaç duyduklarında MyISAM veya diğer veri türlerini seçin.


1
Teşekkürler, gerçekten bilgilendirici ve net bir özet.
informatik01

18

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.

Güncel değil - InnoDB şimdi FULLTEXTve SPATIAL. InnoDB hem okuma hem de yazma ağır yükler için iyidir .
Rick James,

8

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

5
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 genelleştirmeye katılmıyorum. Uygun indeksleme ve iyi yapılandırılmış hafıza ayarlarına sahip iyi tasarlanmış InnoDB tabloları, bir InnoDB tablosunun MyISAM
TechieGurl

3
Birçok "yüksek kullanım" durumunda InnoDB aslında MyISAM'dan daha iyi performans gösteriyor . MyISAM, belirli bir problem için özel bir araçtır, InnoDB birçok durumda size daha iyi hizmet verecektir (bu yüzden neden MySQL ekibinin varsayılan motoru yaptığını). Çünkü MyISAM, MySQL topluluğunun InnoDB olgunlaştıktan sonra bile varsayılan olarak MyISAM'ı kullanma alışkanlığı haline getirdiği uzun süredir tek motordu.
Nick Chammas,

2
InnoDB için FULLTEXT araması, MySQL 5.6 geliştirme döngüsü boyunca kısmen eklendi. Şimdi belirtilen URL, InnoDB'yi de kapsamaktadır.
Max Webster

5

MyISAM

MYISAM, masa seviyesinde kilitleme, FULLTEXT araması sağlar. MYISAM, tüm depolama motorlarını işleyen en esnek AUTO_INCREMENTED sütununa sahiptir. MYISAM işlemleri desteklemiyor.

InnoDB

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


5

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 birbirinden 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, kademeli silme ve güncelleme işlemleri dahil olmak üzere 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 endeksi istatistiklerinin gelişmiş doğruluğunu ve MySQL yeniden başlatmalarında tutarlılığı sağlar.
  • InnoDB masa önbelleğini budama: Çok sayıda tablo içeren 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

Bu nedenle, MyISAMzaten 5.6'ya yükseltilmişseniz, Engine'i kullanmanın hiçbir anlamı yoktur , eğer o zaman MySQL 5.6'ya yükseltmeyi beklemeyin.

MySQL 5.6 kullanarak InnoDB VS MyISAM performansı


2

MyISAM

MyISAM, MySQL için bir depolama motorudur. MySQL 5.5'ten önce MySQL için varsayılan depolama motoruydu. Eski ISAM depolama motoruna dayanı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. Ancak, silme ve güncelleme işlemleri daha problemlidir: 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. FULLTEXTOpenGIS standardını takip eden hem SQL hem de XA işlemlerini, tablo alanlarını, dizinleri ve mekansal işlemleri uygular . Bazı OEM sürümleri olması dışında 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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.