Los índices pueden jugar un papel importante en la optimización de consultas y en la búsqueda rápida de resultados en tablas. Por lo tanto, el paso más importante es seleccionar qué columnas se indexarán. Hay dos lugares principales donde podemos considerar la indexación: columnas a las que se hace referencia en la cláusula WHERE y columnas utilizadas en las cláusulas JOIN. En resumen, estas columnas deben indexarse en función de las cuales debe buscar registros particulares. Supongamos que tenemos una tabla llamada compradores donde la consulta SELECT usa índices como los siguientes:
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 */
Dado que se hace referencia a "buyer_id" en la parte SELECT, MySQL no lo usará para limitar las filas elegidas. Por lo tanto, no es muy necesario indexarlo. El siguiente es otro ejemplo un poco diferente al anterior:
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 */
De acuerdo con las consultas anteriores first_name, las columnas last_name se pueden indexar ya que están ubicadas en la cláusula WHERE. También se puede considerar un campo adicional, country_id de la tabla de países, para la indexación porque está en una cláusula JOIN. Por lo tanto, se puede considerar la indexación en todos los campos de la cláusula WHERE o una cláusula JOIN.
La siguiente lista también ofrece algunos consejos que siempre debe tener en cuenta cuando intente crear índices en sus tablas:
- Solo indexe las columnas que se requieren en las cláusulas WHERE y ORDER BY. La indexación de columnas en abundancia resultará en algunas desventajas.
- Intente aprovechar las funciones de "prefijo de índice" o "índice de varias columnas" de MySQL. Si crea un índice como INDEX (primer nombre, apellido), no cree INDEX (primer nombre). Sin embargo, "prefijo de índice" o "índice de varias columnas" no se recomienda en todos los casos de búsqueda.
- Utilice el atributo NOT NULL para aquellas columnas en las que considere la indexación, de modo que los valores NULL nunca se almacenarán.
- Utilice la opción --log-long-format para registrar consultas que no utilizan índices. De esta manera, puede examinar este archivo de registro y ajustar sus consultas en consecuencia.
- La declaración EXPLAIN le ayuda a revelar cómo MySQL ejecutará una consulta. Muestra cómo y en qué orden se unen las tablas. Esto puede resultar muy útil para determinar cómo escribir consultas optimizadas y si es necesario indexar las columnas.
Actualización (23 de febrero de 2015):
Cualquier índice (bueno / malo) aumenta el tiempo de inserción y actualización.
Dependiendo de sus índices (número de índices y tipo), se busca el resultado. Si su tiempo de búsqueda aumentará debido al índice, entonces es un índice incorrecto.
Probablemente en cualquier libro, la "Página de índice" podría tener una página de inicio de capítulo, un inicio de número de página de tema y también un inicio de página de subtema. Algunas aclaraciones en la página de índice ayudan, pero un índice más detallado puede confundirlo o asustarlo. Los índices también tienen memoria.
La selección de índices debería ser prudente. Tenga en cuenta que no todas las columnas requerirán index.