2010-08-04 4 views
3

Dire que j'ai une requête comme ce qui suit:Des indices multiples sont-ils nécessaires pour plusieurs clauses where?

SELECT * FROM users WHERE username = 'test' AND somethingelse = 'test' 

Je me demande s'il est nécessaire d'indexer les deux colonnes pour l'optimisation. Est-ce que MySQL trouve d'abord toutes les colonnes de nom d'utilisateur avec la valeur 'test', puis recherche ces résultats pour les colonnes somethingelse avec 'test'? Ou cela arrive-t-il simultanément?

Répondre

4

Oui, vous devriez. Chaque colonne et combinaison de colonnes qui apparaît dans une clause WHERE doit avoir un index pour une recherche efficace. Vous l'obtenez pour les champs de clé primaire car un index est créé pour ceux-ci en vertu d'être déclaré une clé primaire. Les autres colonnes nécessitent que vous les indexiez.

Vous aurez donc un index pour les noms d'utilisateur et les colonnes somethingelse.

Si le nom d'utilisateur doit être unique, il peut avoir son propre index.

+0

Est-ce que le nom d'utilisateur + quelque chose que vous faites référence à un index composite? –

+0

Si vous avez une clé username + somethingelse, vous n'avez pas besoin d'une clé de nom d'utilisateur (pour la recherche, vous pourriez en avoir besoin pour une contrainte unique). –

+0

@ soren.qvist - oui, c'est un index sur les deux. – duffymo

Questions connexes