2011-01-02 13 views
5

Ho letto vari thread su quale è meglio tra InnoDB e MyISAM. Sembra che i dibattiti siano da usare o l'altro. Non è possibile utilizzare entrambi, a seconda del tavolo?InnoDB o MyISAM - Perché non entrambi?

Quali sarebbero gli svantaggi nel fare ciò? Per quanto posso dire, il motore può essere impostato durante il comando CREATE TABLE. Pertanto, alcune tabelle che vengono spesso lette possono essere impostate su MyISAM, ma le tabelle che necessitano di supporto per le transazioni possono utilizzare InnoDB.

+1

ciò che è un indice chiave primaria cluster? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html Perché gli indici delle chiavi primarie in cluster sono migliori degli indici btree normali? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

risposta

13

È possibile avere entrambe le tabelle MyISAM e InnoDB nello stesso database. Quello che troverete, però, quando si hanno tavoli molto grandi, MyISAM potrebbe causare problemi di blocco del tavolo. Ciò che questo fa alla fine è, blocca l'intera tabella per una singola transazione, il che è molto brutto se hai molti utenti che usano il tuo sito web. Ad esempio, se un utente cerca qualcosa sul tuo sito e la query richiede alcuni minuti per essere completata, nessun altro utente potrebbe utilizzare il tuo sito durante quel periodo perché l'intera tabella è bloccata.

InnoDB d'altra parte utilizza il blocco a livello di riga, ovvero quella riga è l'unica riga bloccata dalla tabella durante una transazione. InnoDB può essere più lento nelle ricerche perché non offre la ricerca full-text come MyISAM, ma questo non è un grosso problema quando lo si confronta con il blocco a livello di tabella di MyISAM. Se si utilizza InnoDB, come molti siti di grandi dimensioni, è possibile utilizzare un motore di ricerca lato server come Sphinx per ricerche di testo completo. O potresti anche usare una tabella MyISAM per fare la ricerca come f00 suggerita. L'ho consigliato personalmente a InnoDB principalmente a causa della funzione di blocco a livello di riga, ma anche perché è possibile implementare la ricerca di testo completo in molti altri modi.

Fondamentalmente, se si dispone di un'applicazione di bacheca con un sacco di selezioni, inserti e aggiornamenti, InnoDB è probabilmente la scelta generalmente appropriata. Ma se non stai costruendo qualcosa di simile (o qualsiasi altra cosa con utenti registrati) e lavori principalmente con contenuti statici (o più letture che scritture), allora potresti usare MyISAM.

+4

se hai bisogno di ricerca fulltext devi solo creare un tavolo myisam e usalo per indicizzare i tuoi dati innodb ben raggruppati - semplice. –

+0

Sì, è anche un'ottima opzione. –

+0

Grazie, ottima risposta.A giudicare dalla mia applicazione, sembra che InnoDB sia il migliore da usare. – Skoder

3

Sì, infatti, è possibile utilizzare entrambi nello stesso database, è possibile scegliere separatamente per ogni tabella.

0

Non si sceglie InnoDB o MyISAM a livello di database, ma a livello di tabella. Quindi all'interno di un database potreste avere alcune tabelle che eseguono il motore InnoDB e alcune che eseguono MyISAM. Come hai sottolineato, puoi scegliere di utilizzare InnoDB sulle tabelle che richiedono transazioni ecc. E MyISAM dove hai bisogno di altre funzionalità come la ricerca full-text.

1

In breve, InnoDB è utile se si sta lavorando su qualcosa che necessita di un database affidabile in grado di gestire molte istruzioni INSERT e UPDATE.

e, MyISAM è buono se hai bisogno di un database che per lo più richiede molte istruzioni di lettura (SELECT) invece di scrivere (INSERISCI e AGGIORNAMENTI), considerando il suo inconveniente sulla cosa del blocco del tavolo.

si consiglia di controllare;
Pros and Cons of InnoDB
Pros and Cons of MyISAM

Problemi correlati