Jaka jest różnica między MyISAM i InnoDB? [duplikat]

to pytanie ma już odpowiedzi tutaj : MyISAM kontra InnoDB [zamknięty] (25 odpowiedzi) Zamknięte 7 lat temu .

Rozumiem, że to pytanie było zadawane wcześniej, ale najczęściej jest zadawane w odniesieniu do konkretnej bazy danych lub tabeli. Nie mogę znaleźć odpowiedzi na tej stronie, która opisuje dwa silniki i ich różnice bez względu na czyjąś konkretną bazę danych.

Chcę być w stanie podejmować bardziej świadome decyzje w przyszłości w odniesieniu do projektowania tabeli lub bazy danych, więc szukam wyczerpującej odpowiedzi na różnice pomiędzy dwoma silnikami magazynowymi.

Jaka jest różnica między MyISAM a InnoDB i czego powinienem szukać, próbując zdecydować między jednym a drugim?

Author: Rachel, 2012-09-27

2 answers

Główne różnice między InnoDB i MyISAM ("w odniesieniu do projektowania tabeli lub bazy danych", o które pytałeś) to wsparcie dla "referential integrity" i "transactions".

Jeśli potrzebujesz bazy danych do wymuszenia ograniczeń klucza obcego, lub potrzebujesz bazy danych do obsługi transakcji (tj. zmian dokonanych przez dwie lub więcej operacji DML obsługiwanych jako jedna jednostka pracy, z wszystkimi zmianami albo zastosowanymi, albo wszystkie zmiany zostały cofnięte), to wybierz silnik InnoDB, ponieważ te funkcje są nieobecne w silniku MyISAM.

To dwie największe różnice. Kolejną dużą różnicą jest współbieżność. Dzięki MyISAM, oświadczenie DML uzyska wyłączną blokadę na stole, a podczas gdy blokada ta jest utrzymywana, żadna inna sesja nie może wykonać operacji SELECT lub DML na stole.

Te dwa konkretne silniki, o które pytałeś (InnoDB i MyISAM), mają różne cele projektowe. MySQL ma również inne silniki pamięci masowej, z własnymi celami projektowymi.

Więc w wybierając pomiędzy InnoDB i MyISAM, pierwszym krokiem jest określenie, czy potrzebne są funkcje oferowane przez InnoDB. Jeśli nie, to MyISAM jest do rozważenia.

Bardziej szczegółowe omówienie różnic jest raczej niepraktyczne (na tym forum) bez bardziej szczegółowego omówienia przestrzeni problemowej... jak aplikacja będzie korzystać z bazy danych, ile tabel, rozmiar tabel, obciążenie transakcji, woluminy select, insert, aktualizacje, wymagania współbieżności, funkcje replikacji, itd.


Logiczny projekt bazy danych powinien koncentrować się na analizie danych i wymaganiach użytkownika; Wybór użycia relacyjnej bazy danych nastąpi później, a nawet później wybór MySQL jako systemu zarządzania relacyjną bazą danych, a następnie wybór silnika pamięci dla każdej tabeli.

 422
Author: spencer7593,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-14 17:10:08

MYISAM:

  1. MYISAM obsługuje blokowanie na poziomie tabeli
  2. MyISAM designed for need of speed
  3. MyISAM nie obsługuje kluczy obcych, dlatego wywołujemy MySQL z MYISAM is DBMS
  4. MyISAM przechowuje swoje tabele, Dane i indeksy w przestrzeni dyskowej za pomocą oddzielnych trzech różnych plików. (tabl.FRM, tabl.MYD, tableename.MYI)
  5. MYISAM nie obsługuje transakcji. Nie możesz się zobowiązać i wycofać z MYISAM. Jak już wydasz komendę, to gotowe.
  6. MyISAM wspiera wyszukiwanie pełnotekstowe
  7. możesz użyć MyISAM, jeśli tabela jest bardziej statyczna z dużą ilością opcji Wybierz i mniej aktualizacji i usuwania.

INNODB:

  1. InnoDB obsługuje blokowanie na poziomie wiersza
  2. InnoDB zaprojektowany z myślą o maksymalnej wydajności przy przetwarzaniu dużych ilości danych
  3. InnoDB obsługuje klucze obce, dlatego wywołujemy MySQL z InnoDB to RDBMS
  4. InnoDB przechowuje swoje tabele i indeksy w przestrzeni tabel
  5. InnoDB wspiera transakcje. Możesz commit i rollback z InnoDB
 347
Author: medina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 02:55:57