Les index peuvent jouer un rôle important dans l'optimisation de la requête et de la recherche les résultats rapidement sur les tables. C'est donc l'étape la plus importante pour sélectionner les colonnes à être indexé. Il existe deux principaux lieux où l'on peut envisager d'indexation: les colonnes référencées dans la clause where et les colonnes utilisées dans les clauses JOIN. Bref, ces colonnes doivent être indexés en fonction de qui vous êtes nécessaire à la recherche des documents particuliers. Supposons, nous avons une table nommée acheteurs où la requête SELECT utilise les index comme ci-dessous:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
Depuis "buyer_id" est référencé dans la partie SELECT, MySQL de ne pas utiliser de limiter les choisi de lignes. Par conséquent, il n'y a pas besoin de l'indexer. Ci-dessous est un autre exemple un peu différent de l'-dessus:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
Selon les au-dessus des requêtes first_name, last_name les colonnes peuvent être indexés comme ils sont situés dans la clause where. Aussi un champ supplémentaire, country_id from pays de table, peuvent être considérés pour l'indexation, car il est dans une clause de JOINTURE. Afin d'indexation peut être considéré comme sur tous les champs dans la clause where ou d'une clause de JOINTURE.
La liste suivante propose également quelques conseils que vous devez toujours garder à l'esprit lorsque l'intention de créer des index dans vos tables:
* Only index those columns that are required in WHERE and ORDER BY clauses. Indexing columns in abundance will result in some disadvantages.
* Try to take benefit of "index prefix" or "multi-columns index" feature of MySQL. If you create an index such as INDEX(first_name, last_name), don't create INDEX(first_name). However, "index prefix" or "multi-columns index" is not recommended in all search cases.
* Use the NOT NULL attribute for those columns in which you consider the indexing, so that NULL values will never be stored.
* Use the --log-long-format option to log queries that aren't using indexes. In this way, you can examine this log file and adjust your queries accordingly.
* The EXPLAIN statement helps you to reveal that how MySQL will execute a query. It shows how and in what order tables are joined. This can be much useful for determining how to write optimized queries, and whether the columns are needed to be indexed.