Donc, j'ai cette drôle d'exigence de créer un index sur une table uniquement sur un certain ensemble de lignes.Créer un index seulement sur certaines lignes dans mysql
C'est ce que ma table ressemble:
UTILISATEUR: userid, friendID, créé, blah0, blah1, ..., blahN
Maintenant, je voudrais créer un index:
(ID utilisateur, friendID, créé)
mais seulement sur les lignes où userid = friendid. La raison en est que cet index ne sera utilisé que pour satisfaire les requêtes où la clause WHERE contient "userid = friendid". Il y aura beaucoup de lignes où ce n'est PAS le cas, et je ne veux vraiment pas gaspiller tout cet espace supplémentaire sur l'index. Une autre option serait de créer une table (table de requête) qui est remplie à l'insertion/mise à jour de cette table et de créer un déclencheur pour le faire, mais encore une fois je suppose qu'un index sur cette table signifierait que les données seraient être stocké deux fois.
Comment mysql stocke-t-il les clés primaires? Je veux dire, est-ce que la table est commandée sur la clé primaire ou est-elle ordonnée par ordre d'insertion et le PK est comme un index unique normal?
J'ai vérifié sur les index cluster (http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html), mais il semble que seul InnoDB les supporte. J'utilise MyISAM (je mentionne cela parce que j'aurais pu créer un index clusterisé sur ces 3 champs dans la table de requête).
Je cherche essentiellement quelque chose comme ceci:
ALTER UTILISATEURS DE TABLE ADD INDEX (userid, friendID, créé) OÙ userid = friendID
Apparemment, mon exigence n'est pas si drôle après tout. db.cs.berkeley.edu/papers/ERL-M89-17.pdf – dhruvbird