2012-10-19 18 views
26

Sto scrivendo un'app Web per i miei studi che include la ricerca di testo completo e chiavi esterne.Perché il motore MyISAM di MySQL non supporta chiavi esterne?

Ho letto da qualche parte, il motore MyISAM è adatto per la ricerca di testo completo e InnoDB per le chiavi esterne.

In questa situazione quale motore dovrei usare per la migliore prestazione?

  • Perché MyISAM non supporta la relazione con le chiavi esterne ma InnoDB funziona?
  • Perché MyISAM supporta la ricerca full text ma InnoDB no?
+1

dov'è il 'somewhere'? Credo che sia spiegato anche in questo 'da qualche parte ' – ajreal

+5

Le funzionalità non esistono per impostazione predefinita. Qualcuno deve implementarle. –

+0

@ajreal Ho letto dal mio libro universitario. Quel libro spiega vantaggi e svantaggi dei motori. – Firefox101

risposta

38
  1. gentilmente mi dicono, In questa situazione quale motore devo usare per migliorare le prestazioni?

    Le prestazioni di ciascun motore di archiviazione dipenderanno dalle query eseguite. Tuttavia, tenere presente che tabelle diverse all'interno dello stesso database possono utilizzare diversi motori di archiviazione.

  2. Perché il motore MyISAM non supporta la relazione di chiave esterna e InnoDB funziona?

    Come documentato in Foreign Key Differences:

    In una fase successiva, vincoli di chiave esterna sarà attuato per MyISAM tabelle pure.

    Pertanto, i vincoli di chiave esterna non sono stati ancora implementati in MyISAM.

EDIT: Come quel commento viene rimosso da documenti, sembra che non è più in programma di implementare vincoli di chiave esterna in MyISAM motore.

  1. Perché motore MyISAM supporta ricerca a testo integrale e InnoDB non lo fa?

    Come documentato in What Is New in MySQL 5.6:

    È possibile creare FULLTEXT indici su InnoDB tavoli, e interrogare utilizzando la sintassi MATCH() ... AGAINST.

    Pertanto, ricerca a testo integrale è stato implementato in InnoDB partire da MySQL 5.6.

+3

Non vedo la citazione "In una fase successiva, i vincoli delle chiavi esterne verranno implementati anche per le tabelle MyISAM." nei documenti MySQL. Forse quella caratteristica è stata non roadmap? – shabbychef

+0

@shabbychef: hai ragione: sembra che il commento sia stato rimosso tra il [10 settembre 2013] (http://web.archive.org/web/20130910041553/http://dev.mysql.com/doc /refman/5.6/en/ansi-diff-foreign-keys.html) e [11 ottobre 2013] (http://web.archive.org/web/20131011141007/http://dev.mysql.com/doc /refman/5.6/en/ansi-diff-foreign-keys.html); Non riesco a vedere alcun riferimento altrove nella documentazione corrente per indicare che i vincoli FK sono ancora destinati a MyISAM in futuro, né posso vedere alcuna documentazione specifica/discussione/registrazione per questo cambiamento. Quindi sì, direi che non è più pianificato. – eggyal

0

mi ricordo i tempi in cui MySQL aveva solo MyISAM e innodedb era in fase di sviluppo. MyIsam non ha chiavi esterne perché è un vecchio sistema che non supporta le relazioni nel database. Non userà mai le chiavi esterne! Per usarlo hai innodb.Se non hai bisogno di tutto, come le relazioni in DB, usa MyISAM per ottenere prestazioni migliori.

Problemi correlati