ans le cas d'une requête du genre "SELECT `bidule` FROM `chose` WHERE `machin`="truc", on est en O de quoi ? Et quand il y a des jointures, des relations n:m ? Si vous avez des infos...
Pour le select simple:
- O(n) s'il n'y a pas d'index sur le champ 'machin'
- O(log(n)) si 'machin' est indexé (index de type B-TREE, les seuls utilisés par MySQL sur les tables de type MyISAM)
-O(const) si 'machin' a un index de type HASH
Pour les jointures entre deux tables:
- O(n) * O(m) sans index
- O(log(n) * O(log(m)) avec les index qui vont bien
En pratique, faire des jointures sans index relève de l'opération suicide dès que les tables ont plus de quelques enregistrements.
PS: Je ne connais pas Dokeos mais je ne peux pas m'empêcher de penser qu'une application qui a besoin de 200,000 tables et qui nécessite d'en ajouter pour intégrer de nouveaux cours a sérieusement «foiré» la définition de son modèle de données.
[^] # Re: Merci !
Posté par netsurfeur . En réponse au message Gérer *beaucoup* (vraiment !) de bases MySQL. Évalué à 5.
Pour le select simple:
- O(n) s'il n'y a pas d'index sur le champ 'machin'
- O(log(n)) si 'machin' est indexé (index de type B-TREE, les seuls utilisés par MySQL sur les tables de type MyISAM)
-O(const) si 'machin' a un index de type HASH
Pour les jointures entre deux tables:
- O(n) * O(m) sans index
- O(log(n) * O(log(m)) avec les index qui vont bien
En pratique, faire des jointures sans index relève de l'opération suicide dès que les tables ont plus de quelques enregistrements.
PS: Je ne connais pas Dokeos mais je ne peux pas m'empêcher de penser qu'une application qui a besoin de 200,000 tables et qui nécessite d'en ajouter pour intégrer de nouveaux cours a sérieusement «foiré» la définition de son modèle de données.