Bonjour,
Je me demandais quel moteur choisir pour de meilleure performances pour un site avec beaucoup de contenu?
Est-il préférable d'utiliser MyISAM et de faire des jointures
ou utiliser INNODB pour utiliser les clés étrangères?
Merci
Bonjour,
Je me demandais quel moteur choisir pour de meilleure performances pour un site avec beaucoup de contenu?
Est-il préférable d'utiliser MyISAM et de faire des jointures
ou utiliser INNODB pour utiliser les clés étrangères?
Merci
tout dépend de la rigueur que tu souhaite apporter à ta base de données
en matière de stockage, MyISAM est limité à presque autant d'octet par table qu'InnoDB (65to / 64to respectivement je crois)
Après en ce qui concerne ton contenu, le seul avantage qu'aurait MyISAM serait l'index FULLTEXT et encore...
Moi je te conseille InnoDB, mais ne te contente pas d'un seul avis
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
Ok merci
Mais les bases de données utilisant MyISAM ne sont pas plus facile a copier? (copier/coller du répertoire)
J'ai vu que pour innoDB, si les tables sont reliées entre elles via des foreign_keys, si je supprime un utilisateur, et que cet utilisateur a posté dans un forum, commentaires, etc.
Tout ce qui est en relation avec cet utilisateur est supprimé? Est-ce vrai?
Donc gain en requête SQL, mais aussi danger de perdre du contenu?
Crois bien que les mec d'Oracle (qui ont créé InnoDB ) y ont pensé. et tu as enfait le choix.
Soit tu supprime l'utilisateur et tou ce qui en rapport avec lui est supprimé. donc dans l'exemple d'un forum, sa signature, ses posts, ses sujets etc...
sinon tu supprime l'utilisateur et ca ne fait rien d'autres
et cette distinction est on ne peut plus simple à faire
et pour la copie des base de données, en général c'est déconseillé de copier les repertoires. Même si tu as raison, l'arboressence d'un dossier MyISAM est plus claire
pour copier des base de données le mieux c'est de la dumper ! (en faire un backup autrement dit )
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
Ok merci
InnoDB à l'air bien pensé! Je me demande comment ça ce fait que des CMS open-source tels que joomla sont toujours en MyISAM.
Pour faire la distinction, c'est dans la requête de suppression?
Bonjour,
Ces distinctions se gère dans la structure de la table, il est possible de faire un certain nombre d'actions au delete ou a l'update d'une table liée.
J'ai écrit a ce sujet un article qui traite de ce genre de pratique, tu y verra l'intérêt de ces foreign key appuyé d'exemple : http://alain-defrance.developpez.com...D/contraintes/
Je te recommande donc aussi innodb qui gère beaucoup mieux l'intégrité.
http://alaindefrance.wordpress.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
SDE at BitTitan
http://www.mysqlperformanceblog.com/...hmarks-part-1/
InnoDB est plus performant en moyenne sur ces données.
Vraiment intéressant le tuto!
C'est clair que pour gérer mon CMS j'utilisais toujours 3 4 requêtes SQL pour supprimer les tuples orphelins!
Maintenant est-ce que innoDB est compatible chez tous les hébergeurs?
Je veux dire, c'est quand même bizarre que presque tous les CMS open source utilises MyISAM alors que innoDB, d'après le graphe de performances est beaucoup plus rapide que MyISAM.
par défaut, la plupart des hébergeur désactive InnoDB, dans un souci de performances.
en fonction des accès que tu as sur le serveur, tu pourras toujours l'activer très simplement .
Je pense que c'est étroitement lié au fait que les CMS fonctionnent sur un moteur MyISAM, pour les rendre compatible sur tout plateforme
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
Ha merde alors
Je ne comprends pas pourquoi il le désactive pour des raisons de performances si justement au client ça lui emporte en performance sur son site...
Pas vraiment logique
MyIsam est souvent utilisé par les CMS dans un souci de portabilité.
Par défaut une panoplie de moteur est disponible mais certains hébergeur préfèrent les désactiver. Ce n'est pas non plus une généralité.
Pour ma part j'utilise très couramment Innodb car il permet, je trouve, une conception plus "pro".
Après si ton outil sera distribué il sera peut-être plus judicieux d'utiliser MyIsam, en revanche si tu programme ça pour une entreprise, alors il sera plus pratique d'utiliser Innodb.
http://alaindefrance.wordpress.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
SDE at BitTitan
Il y a aussi probablement le fait qu'InnoDB est un peu embêtant avec ses fichiers. Par défaut il loge toutes les base de données dans un fichier. Pire ce fichier augmente en taille, mais ne diminue jamais. Donc si tu dump "par erreur" 300Go de données dans ta base, ce fichier fera à tout jamais 300Go au moins.
Il y a bien sur des moyens pour gérer cela, mais je pense qu'un hébergeur de base n'a pas envie de se prendre là tête avec ça.
Aussi, les caches innodb et myisam ne sont pas tous les mêmes donc c'est pas très malin, en général, d'avoir un mix des deux.
Bonjour,
permettez moi de reveiller ce post pour remercier Kazou pour son merveilleux tuto qui m'a beaucoup aide a comprendre le moteur InnoDB et qui me fait dire que j'ai ete con d'utiliser MyISAM
j'ai fait des tests en utilisant le code donne dans le tuto :
pour creer ces tables dans phpmyadmin, j'ai inserer des enregistrements, supprime un client et pouf, c'est magique, les commandes effectuees par ce clients ont automatiquement ete supprimees
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 CREATE TABLE `Clients` ( `numClient` INTEGER AUTO_INCREMENT, `nomClient` VARCHAR(20) NOT NULL, `prenomClient` VARCHAR(20) NOT NULL, `adresseClient` VARCHAR(100) NULL, `cpClient` VARCHAR(5) NULL, `villeClient` VARCHAR(30) NULL, `dateInscription` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT PRIMARY KEY (`numClient`) ) ENGINE = `innoDB`; CREATE TABLE `Produits` ( `numProduit` INTEGER AUTO_INCREMENT, `libelleProduit` VARCHAR(50) NOT NULL, `prixProduit` FLOAT NOT NULL, CONSTRAINT PRIMARY KEY (`numProduit`) ) ENGINE = `innoDB`; CREATE TABLE `Commandes` ( `numCommande` INTEGER AUTO_INCREMENT, `dateCommande` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `numClient` INTEGER NOT NULL, CONSTRAINT PRIMARY KEY (`numCommande`) ) ENGINE = `innoDB`; CREATE TABLE `Concerner` ( `numProduit` INTEGER NOT NULL, `numCommande` INTEGER NOT NULL, `nombreProduit` INTEGER NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (`numProduit`,`numCommande`) ) ENGINE = `innoDB`; ALTER TABLE `Commandes` ADD CONSTRAINT `FK_Commandes_Clients` FOREIGN KEY (`numClient`) REFERENCES `Clients` (`numClient`) ON UPDATE CASCADE ON DELETE CASCADE; ALTER TABLE `Concerner` ADD CONSTRAINT `FK_Concerner_Produits` FOREIGN KEY ( `numProduit` ) REFERENCES `Produits` (`numProduit`) ON UPDATE CASCADE ON DELETE CASCADE, ADD CONSTRAINT `FK_Concerner_Commandes` FOREIGN KEY ( `numCommande` ) REFERENCES `Commandes` (`numCommande`) ON UPDATE CASCADE ON DELETE CASCADE;
j'aurais parcontre juste 3 petites questions a te poser stp :
1- il parait que MyISAM est un peu plus rapide et performant que InnoDB, qu'en penses tu? j'ai la tables clients/membres qui contient plus de 4 0000 enregistrement et une autres tables qui contient plus de 25 000 et qui augmente au fil du temps!!
2- concernant l'interclassement, qu'est ce qui est recommandé??
3- j'ai un peu de mal a comprendre les 2 tables: "Commandes" et "Concerner":
pour "commandes" c'est plus ou moins claire, il y a une cle primaire (numCommande) et une cle etrangere (numClient)
pour "concerner", j'ai un peu de mal
il y a normalement 2 cles etrangeres (numProduit) et (numCommande) alors que phpmyadmin m'indique que c'est des cles primaires
il m'indique parcontre qu'il y a (numCommande) qui est en cle etrangere.
pk ne pas rajouter numProduit comme cle etrangere ???
Merci bp.
Au fait, je viens de me rendre compte que ds le code de creation des tables, tu definis bien (numProduit) et (numCommande) comme clé etrangere mais je ne sais pas pk phpmyadmin ne me l'indique pas. ci joint ce que j'ai a l'ecran!
Bonjour et merci du compliment
Plus rapide oui. En ce qui concerne la performence, je pense qu'un SGBD qui gere le contrôle l'intégrité est plus performant qu'un SGBD qui ne le gere pas.
Bien sûr cela dépend de l'utilisation que tu va en faire, mais a mon sens le problème de performence ne se pose pas entre type MyIsam et Innodb.
Je ne peux pas mieux te conseiller que d'aller lire l'article d'Antoun
Surprenant ... la clé étrangère est pourtant bien définie :
Ici si l'on supprime un produit, la supression sera repercutée dans toutes les commandes. Bien sûr ce n'est pas correct dans une véritable application car l'on souhaiterait garder les données telle qu'elles l'étaient à la passation. Mais ce n'est pas ce n'est pas l'objectif de l'article.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ALTER TABLE `Concerner` ADD CONSTRAINT `FK_Concerner_Produits` FOREIGN KEY ( `numProduit` ) REFERENCES `Produits` (`numProduit`) ON UPDATE CASCADE ON DELETE CASCADE, ADD CONSTRAINT `FK_Concerner_Commandes` FOREIGN KEY ( `numCommande` ) REFERENCES `Commandes` (`numCommande`) ON UPDATE CASCADE ON DELETE CASCADE;
http://alaindefrance.wordpress.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
SDE at BitTitan
c'est la moindre des choses que je puisse dire
Code : Sélectionner tout - Visualiser dans une fenêtre à part Bonjour et merci du compliment
j'ai beaucoup beaucoup de relationnel dans mes tables, je pense que le meilleur choix serait d'utiliser des tables innoDB, meme si je supprime pratiquement jamais des clients, ca serait utile de s'en servir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Bien sûr cela dépend de l'utilisation que tu va en faire, mais a mon sens le problème de performence ne se pose pas entre type MyIsam et Innodb.
j'utilise toujours une suppression logique (un champ supp = oui/non)
que penses tu de cette maniere de gerer les suppression??
dans les tables InnoDB, ils parlent beaucoup de transactions, que veulent ils dire par transaction??? (excuse mon ignorance!! )
Merci pour ce lien
Code : Sélectionner tout - Visualiser dans une fenêtre à part Je ne peux pas mieux te conseiller que d'aller lire l'article d'Antoun
effectivement c'est bizarre, c'est peut etre parce que je suis toujorus en version 4.1 de mysql et 2.6.4 de phpmyadmin, car il y a qlq chose qui ne va pas dans phpmyadmin. les 2 champs sont des cles etrangere, et phpmyadmin me propose le choix entre uniquement PRIMARY, INDEX, UNIQUE et FULLTEXT!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part Surprenant ... la clé étrangère est pourtant bien définie
c'est quoi FULLTEXT?? je pensais que ca concernait que MyISAM!!
une derniere question stp:
il peu y avoir combien d'enregistrement maxi ds une table MyIsam ou InnoDB??
Merci bien
Cette methode permet de garder et pouvoir restaurer les informations supprimés, mais elles occupent de la place. Elles peuvent donc provoquer une baisse des performances. Cela dépend bien sur de l'organisation de tes données et des optimisations qui y sont faites. Si tu ne prévoit jamais de restaurer les données il est inutile de les conserver.
FULLTEXT permet d'intexer un champ. Pour plus d'explication tu peut aller voir ici
A ma connaissance il n'y a pas de limite a part l'espace disque, et les degradations des performances que cela engendre. Il est important de savoir que les pertes des performences par rapport au nombre d'enregistrement n'est pas linéaire mais exponentiel. Pour comprendre cela je te conseil de lire l'article de SQLpro qui explique ce phénomène sur SQL Server
http://alaindefrance.wordpress.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
SDE at BitTitan
OK, merci pour toutes ses informations et liens, j'ai de la lecture maintenant
@ bientot
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager