sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué columnas generalmente son buenos índices?

Los índices pueden desempeñar un papel importante en la optimización de consultas y la búsqueda rápida de resultados en las tablas. Por lo tanto, es el paso más importante para seleccionar qué columnas se indexarán. Hay dos lugares principales donde podemos considerar la indexación:las columnas a las que se hace referencia en la cláusula WHERE y las columnas utilizadas en las cláusulas JOIN. En resumen, dichas columnas deben indexarse ​​contra 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 hay una gran necesidad de indexarlo. El siguiente es otro ejemplo un poco diferente del 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, las columnas first_name, 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 cada campo 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 ÍNDICE (nombre, apellido), no cree ÍNDICE (nombre). Sin embargo, no se recomienda "prefijo de índice" o "índice de varias columnas" en todos los casos de búsqueda.
  • Use el atributo NOT NULL para aquellas columnas en las que considere la indexación, para que nunca se almacenen valores NULL.
  • Utilice la opción --log-long-format para registrar consultas que no utilizan índices. De esta forma, puede examinar este archivo de registro y ajustar sus consultas en consecuencia.
  • La declaración EXPLAIN lo ayuda a revelar cómo MySQL ejecutará una consulta. Muestra cómo y en qué orden se unen las tablas. Esto puede ser 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 va a aumentar debido al índice, entonces ese es un índice malo.

Probablemente en cualquier libro, la "Página de índice" podría tener la página de inicio del capítulo, comienza el número de la página del tema, también comienza la página del 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 del índice debe ser sabia. Tenga en cuenta que no todas las columnas requieren index.