2011-07-06 10 views
58

Digamos que en la tabla de empleados, he creado un índice (idx_name) en la columna emp_name de la tabla.¿Cómo se usa el índice en la instrucción select?

Necesito especificar explícitamente el nombre del índice en la cláusula de selección o se usará automáticamente para acelerar las consultas.

Si es necesario especificarlo en la cláusula de selección, ¿cuál es la sintaxis para usar el índice en la consulta de selección?

Respuesta

55

Si desea probar el índice para ver si funciona, aquí es la sintaxis:

SELECT * 
FROM Table WITH(INDEX(Index_Name)) 

La declaración CON forzará el índice que se utilizará.

+40

Esta publicación no responde la pregunta. La respuesta es, en resumen: no es necesario especificar el índice en la consulta. Se usa (o no) automágicamente. Puedes forzarlo, sin embargo. Más detalles (cuándo y por qué hacer esto) en otras publicaciones a continuación. – Rast

2

Al usar la columna a la que se aplica el índice dentro de sus condiciones, se incluirá automáticamente. No tiene que usarlo, pero acelera las consultas cuando se usa.

SELECT * FROM TABLE WHERE attribute = 'value' 

Utilizará el índice apropiado.

26

Buena pregunta,

Por lo general, el motor de base de datos debe seleccionar automáticamente el índice a utilizar en función de planes de ejecución de consultas que se basa. Sin embargo, hay algunos casos muy raros en los que desea obligar al DB a usar un índice específico.

Para poder responder a su pregunta específica, debe especificar la base de datos que está utilizando.

Para MySQL, que desea leer la documentación Index Hint Syntax sobre cómo hacer esto

8

El optimizador juzgará si el uso de su índice hará que su consulta más rápido, y si lo es, se utilizará el índice .

Según su RDBMS puede forzar el uso de un índice, aunque no se recomienda a menos que sepa lo que está haciendo.

En general, usted debe columnas de índice que se utilizan en la tabla de unión de y cuando las declaraciones

12

En generales, se utilizará el índice si el costo asumido de utilizar el índice y, a continuación, posiblemente tener que realizar más marcador las búsquedas son menores que el costo de solo escanear toda la tabla.

Si la consulta es de la forma:

SELECT Name from Table where Name = 'Boris' 

Y fila 1 de cada 1000 tiene el nombre de Boris, es casi seguro que se utilizarán. Si el nombre de todos es Boris, probablemente recurrirá a una exploración de tabla, ya que es poco probable que el índice sea una estrategia más eficiente para acceder a los datos.

Si se trata de una mesa amplia (porción de columnas) y lo hace:

SELECT * from Table where Name = 'Boris' 

Entonces todavía puede optar por realizar la exploración de tabla, si se trata de una suposición razonable de que va a tomar más tiempo de recuperación de la otras columnas de la tabla que simplemente buscar el nombre, o de nuevo, si es probable que esté recuperando muchas filas de todos modos.

4

Generalmente, cuando crea un índice en una tabla, la base de datos usará automáticamente ese índice mientras busca datos en esa tabla. No necesitas hacer nada al respecto.

Sin embargo, en MSSQL, puede especificar un index hint que puede especificar que se debe usar un índice en particular para ejecutar esta consulta. Se puede encontrar más información sobre esto en here.

Index hint también parece estar disponible para MySQL. Gracias a Tudor Constantine.

18

¿Cómo se usa el índice en la instrucción select?
esta manera:

SELECT * FROM table1 USE INDEX (col1_index,col2_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 


SELECT * FROM table1 IGNORE INDEX (col3_index) 
WHERE col1=1 AND col2=2 AND col3=3; 


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2); 

Y muchas más formas de verificación this

¿Debo especificarlo explícitamente?

  • No, no Es necesario especificarlo explícitamente.
  • El motor de base de datos debe seleccionar automáticamente el índice a usar en función de los planes de ejecución de consultas que construye a partir de la respuesta @Tudor Constantin.
  • El optimizador juzgará si el uso de su índice hará que su consulta se ejecute más rápido, y si lo hace, usará el índice. desde @niktrl respuesta
Cuestiones relacionadas