sql - tabla - ¿Cómo usar el índice en la declaración de selección?
indices xml sql server (7)
Digamos en la tabla de empleados, he creado un índice (idx_name) en la columna emp_name
de la tabla.
¿Debo especificar explícitamente el nombre del índice en la cláusula de selección o se usará automáticamente para acelerar las consultas?
Si se requiere que se especifique en la cláusula de selección, ¿cuál es la sintaxis para usar el índice en la consulta de selección?
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''
Usará el índice apropiado.
Buena pregunta,
Por lo general, el motor de DB debe seleccionar automáticamente el índice a usar en función de los planes de ejecución de consultas que construye. 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, desea leer la documentación de la sintaxis de la sugerencia del índice sobre cómo hacer esto
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.
Dependiendo de su RDBMS puede forzar el uso de un índice, aunque no se recomienda a menos que sepa lo que está haciendo.
En general, debe indexar las columnas que usa en las instrucciones join y where de la tabla
En general , el índice se usará si el costo asumido de usar el índice y luego tener que realizar más búsquedas en los marcadores es menor que el costo de simplemente escanear toda la tabla.
Si su consulta es de la forma:
SELECT Name from Table where Name = ''Boris''
Y 1 fila de 1000 tiene el nombre de Boris, casi con seguridad será utilizada. 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 tabla ancha (lote de columnas), usted:
SELECT * from Table where Name = ''Boris''
Entonces aún puede optar por realizar el escaneo de la tabla, si es una suposición razonable de que va a llevar más tiempo recuperar las otras columnas de la tabla que buscar el nombre, o de nuevo, si es probable que esté recuperando un muchas filas de todos modos.
En general, 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 una index hint
que puede especificar que se debe usar un índice en particular para ejecutar esta consulta. Puede encontrar más información sobre esto here .
Index hint
también parece estar disponible para MySQL . Gracias a Tudor Constantine.
Si desea probar el índice para ver si funciona, aquí está la sintaxis:
SELECT *
FROM Table WITH(INDEX(Index_Name))
La declaración WITH obligará al índice a ser utilizado.
¿Cómo usar el índice en la declaración de selección?
de 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 verificar esto
¿Debo especificar explícitamente?
- No, no es necesario especificarlo explícitamente.
- El motor de DB debería 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. de @niktrl respuesta