2009-12-24 4 views
13

J'ai 2 tables dans lesquelles je veux plus de robustesse et, heureusement, je n'ai pas besoin de données et d'examens rapides et fréquents. Toutes les autres tables seraient inévitablement MyISAM. Puis-je utiliser les deux en toute sécurité (j'en ai lu quelques découragements) sans craindre que les bogues ou les données ne soient affectés par les différences entre les moteurs?Utilisation d'une combinaison de tables InnoDB et MyIsam

Répondre

11

Oui, vous pouvez.

Notez que seules les tables InnoDB prennent en charge les transactions et les relations FOREIGN KEY.

26

Vous pouvez, mais cela introduit un certain nombre d'inconvénients:

  • Votre réglage du serveur va maintenant être nécessairement un compromis - vous ne pouvez pas utiliser toute la mémoire soit pour MyISAM OU InnoDB (NB: Cela ne veut pas appliquer si elles sont sur des serveurs différents)
  • réplication échoue dans un certain nombre de garde-cas, parce que si vous avez une transaction échouée qui contenait des modifications à certaines tables MyISAM, il ne peut ni engager correctement, il ne rouler en arrière
  • vous pouvez toujours » t sauvegardez votre serveur en utilisant MVCC, car vous n'obtiendrez toujours pas un snapshot cohérent de MyISAM t

Donc, fondamentalement, je vous encourage à passer entièrement à InnoDB. Ensuite, vous pouvez pratiquement oublier MyISAM et ne pas y consacrer de ressources, et bénéficier pleinement de l'utilisation d'InnoDB. Toute personne qui pense que MyISAM est plus rapide ne peut pas régler InnoDB correctement, ou a des données aussi petites qui s'en soucie. MyISAM effectue des analyses de table plus rapides, mais si vous les faites sur de grandes tables, vous avez de plus gros problèmes.

+0

Belle réponse MarkR, je me demandais dans quelles "edge-cases" la réplication d'une base de données mixte InnoDB/MyIsam pourrait échouer? Utiliser uniquement les transactions affectant les tables InnoDB et MyIsam? Pensez-vous que cela soit sûr dans un autre cas? Merci –

+0

Si une transaction arrive sur le maître qui implique MyISAM et les tables innodb, commet avec succès, est binlogged, alors sur l'esclave, la partie InnoDB échoue avec un blocage, la transaction sera rejugée. Cependant, la partie MyISAM de la transaction ne peut pas être annulée, donc l'esclave devra la répéter (et espérer que rien de mal ne se produira) - mais quelque chose de mauvais peut arriver et l'esclave entier se casse (réplication arrêtée jusqu'à l'intervention manuelle) . Il y a beaucoup d'autres cas, c'est un exemple que je viens d'inventer. – MarkR

Questions connexes