21-03-2014, 05:21 PM
Sur MySQL, l'auto-incrément requiert un index (primaire, unique ou simple), donc même si l'index ralentissait, on n'aurait pas le choix (#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key ).
Pour les dates, je suis d'accord, en revanche pour les clefs étrangères, je le suis moins: leur cardinalité peut être faible. Par exemple, un index sur l'identifiant d'une table d'énumération avec 4 ou 5 valeurs n'apporte rien. L'index sur la colonne qui y fait référence n'apportera rien non plus s'il y a là encore 4 ou 5 valeurs différentes (et s'il n'y en a que 2, l'index aura même tendance à ralentir).
Mais je recommanderai quand même de mettre un Unique/Primary index pour souligner l'unicité des identifiants dans la table d'énumération, quitte à ignorer l'index dans les requêtes (en).
Sinon, oui, si la clef étrangère est du type "id d'un autre objet", avec là une grande cardinalité et un grand nombre d'objets vers lesquels faire pointer la clef, l'index devient intéressant.
"Plus lent", dans mon cas, signifie "5% de temps en plus (cas utilisé: sélectionner les lignes ayant BIT(1)=0 dans une table de 500k lignes).
Dans le cas de l'article, on parle quand même d'un facteur x100 quand les indexes sont mal ajoutés O.o Là, ce n'est plus négligeable...
Pour les dates, je suis d'accord, en revanche pour les clefs étrangères, je le suis moins: leur cardinalité peut être faible. Par exemple, un index sur l'identifiant d'une table d'énumération avec 4 ou 5 valeurs n'apporte rien. L'index sur la colonne qui y fait référence n'apportera rien non plus s'il y a là encore 4 ou 5 valeurs différentes (et s'il n'y en a que 2, l'index aura même tendance à ralentir).
Mais je recommanderai quand même de mettre un Unique/Primary index pour souligner l'unicité des identifiants dans la table d'énumération, quitte à ignorer l'index dans les requêtes (en).
Sinon, oui, si la clef étrangère est du type "id d'un autre objet", avec là une grande cardinalité et un grand nombre d'objets vers lesquels faire pointer la clef, l'index devient intéressant.
"Plus lent", dans mon cas, signifie "5% de temps en plus (cas utilisé: sélectionner les lignes ayant BIT(1)=0 dans une table de 500k lignes).
Dans le cas de l'article, on parle quand même d'un facteur x100 quand les indexes sont mal ajoutés O.o Là, ce n'est plus négligeable...