2011-01-02 10 views
5

Czytałem różne wątki, o których lepiej między InnoDB i MyISAM. Wydaje się, że debaty mają być wykorzystane lub inne. Czy nie jest możliwe użycie obu, w zależności od stołu?InnoDB lub MyISAM - dlaczego nie oba?

Jakie byłyby tego wady? O ile wiem, silnik można ustawić podczas komendy CREATE TABLE. Dlatego niektóre tabele, które często są odczytywane, można ustawić na MyISAM, ale tabele wymagające obsługi transakcji mogą korzystać z InnoDB.

+1

co jest indeks klastrowany klucz podstawowy? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html Dlaczego indeksy klucza podstawowego w klastrach są lepsze niż normalne indeksy btree? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

Odpowiedz

13

Możesz mieć tabele MyISAM i InnoDB w tej samej bazie danych. To, co znajdziesz, gdy masz bardzo duże stoły, spowoduje, że MyISAM spowoduje problemy z blokadą stołu. Ostatecznie to robi, blokuje całą tabelę dla pojedynczej transakcji, co jest bardzo złe, jeśli wielu użytkowników korzysta z Twojej witryny. np. Jeśli użytkownik szuka czegoś w witrynie, a wykonanie zapytania zajmuje kilka minut, żaden inny użytkownik nie może korzystać z witryny w tym okresie, ponieważ cała tabela jest zablokowana.

InnoDB stosuje z kolei blokowanie na poziomie wiersza, co oznacza, że ​​wiersz jest jedynym wierszem zablokowanym w tabeli podczas transakcji. InnoDB może być wolniejszy podczas wyszukiwania, ponieważ nie oferuje pełnego przeszukiwania tekstu, jak MyISAM, ale nie jest to duży problem, gdy porównasz go z blokowaniem MyISAM na poziomie tabeli. Jeśli używasz InnoDB, podobnie jak wiele dużych witryn, możesz użyć wyszukiwarki po stronie serwera, takiej jak Sphinx do wyszukiwania pełnotekstowego. Lub możesz nawet użyć tabeli MyISAM, aby wykonać wyszukiwanie takie jak sugerowane f00. Osobiście polecam InnoDB głównie ze względu na funkcję blokowania na poziomie wiersza, ale także dlatego, że możesz implementować wyszukiwanie pełnotekstowe na wiele innych sposobów.

Zasadniczo, jeśli masz aplikację na tablicę ogłoszeń z wieloma wyborami, wstawkami i aktualizacjami, prawdopodobnie najlepszym wyborem będzie InnoDB. Ale jeśli nie budujesz czegoś takiego (lub jakiejkolwiek innej rzeczy z zarejestrowanymi użytkownikami) i pracujesz głównie ze statyczną zawartością (lub więcej czytasz niż pisze), to możesz użyć MyISAM.

+4

jeśli potrzebujesz wyszukiwania pełnotekstowego, po prostu stwórz tabelę myisam i użyj go, aby ponownie zindeksować dane ładnie zgrupowanych danych innodb - proste. –

+0

Tak, to również bardzo dobra opcja. –

+0

Dzięki, świetna odpowiedź.Sądząc po mojej aplikacji, wygląda na to, że InnoDB jest najlepszy do użycia. – Skoder

3

Tak, faktycznie, możesz używać obu w tej samej bazie danych, możesz wybrać dla każdej tabeli osobno.

0

Nie wybierzesz InnoDB lub MyISAM na poziomie bazy danych, ale zamiast tego na poziomie tabeli. Więc w ramach jednej bazy danych można mieć tabele z uruchomionym silnikiem InnoDB i niektórymi uruchomionymi MyISAM. Jak zauważyłeś, możesz użyć InnoDB w tabelach, które wymagają transakcji itp., Oraz MyISAM, gdzie potrzebujesz innych funkcji, takich jak wyszukiwanie pełnotekstowe.

1

W skrócie, InnoDB jest dobry, jeśli pracujesz nad czymś, co wymaga niezawodnej bazy danych, która może obsługiwać wiele instrukcji INSERT i UPDATE.

i MyISAM jest dobry, jeśli potrzebujesz bazy danych, która będzie przeważnie wymagała dużo instrukcji odczytu (SELECT), a nie pisania (INSERT i AKTUALIZACJE), biorąc pod uwagę jej wadę w przypadku blokady tabeli.

możesz chcieć sprawdzić;
Pros and Cons of InnoDB
Pros and Cons of MyISAM

Powiązane problemy