web-dev-qa-db-fra.com

Pourquoi le moteur MyISAM de MySQL ne prend-il pas en charge les clés étrangères?

J'écris une application Web pour mes études qui inclut la recherche en texte intégral et les clés étrangères.

J'ai lu quelque part, le moteur MyISAM convient à la recherche en texte intégral et InnoDB pour les clés étrangères.

Dans cette situation, quel moteur devrais-je utiliser pour obtenir les meilleures performances?

  • Pourquoi MyISAM ne prend-il pas en charge la relation de clé étrangère, mais InnoDB?
  • Pourquoi MyISAM prend-il en charge la recherche de texte intégral mais pas InnoDB?
32
Firefox101
  1. Dites-moi, dans cette situation, quel moteur dois-je utiliser pour améliorer les performances?

    Les performances de chaque moteur de stockage dépendent des requêtes que vous effectuez. Sachez toutefois que différentes tables d'une même base de données peuvent utiliser différents moteurs de stockage.

  2. Pourquoi le moteur MyISAM ne prend pas en charge la relation de clé étrangère et InnoDB?

    Comme indiqué dans Différences de clé étrangère :

    À une étape ultérieure, les contraintes de clé étrangère seront également appliquées aux tables MyISAM.

    Par conséquent, les contraintes de clé étrangère n'ont tout simplement pas encore été implémentées dans MyISAM.

EDIT: ce commentaire étant supprimé de la documentation, il semble qu'il n'est plus prévu d'implémenter les contraintes de clé étrangère dans le moteur MyISAM.

  1. Pourquoi le moteur MyISAM prend-il en charge la recherche de texte intégral et InnoDB pas?

    Comme décrit dans Quoi de neuf dans MySQL 5.6 :

    Vous pouvez créer des index FULLTEXT sur des tables InnoDB et les interroger à l'aide de la syntaxe MATCH() ... AGAINST .

    Par conséquent, la recherche en texte intégral a été implémentée dans InnoDB à partir de MySQL 5.6.

41
eggyal

Je me souviens de l'époque où mysql n'avait que myisam et innodedb était en développement. MyIsam n'a pas de clé étrangère car c'est un ancien système qui ne supporte pas les relations dans la base de données. Il n'utilisera jamais de clés étrangères! Pour l'utiliser, vous devez innodb. Si vous n'avez pas besoin de tous les éléments, comme les relations dans la base de données, utilisez MyISAM pour obtenir de meilleures performances.

0
rafal