Digamos que en la tabla de empleados, he creado un índice (idx_name) en la emp_name
columna de la tabla.
¿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?
Buena pregunta,
Por lo general, el motor de base de datos debería seleccionar automáticamente el índice que se utilizará en función de los planes de ejecución de consultas que crea. Sin embargo, hay algunos casos bastante raros en los que desea forzar a la base de datos 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 sintaxis de sugerencias de índice sobre cómo hacer esto
fuente
¿Cómo usar el índice en la declaración de selección?
de esta manera:
Y muchas más formas de comprobar esto
¿Necesito especificar explícitamente?
fuente
En general , el índice se utilizará si el costo asumido de usar el índice y luego posiblemente tener que realizar más búsquedas de marcadores es menor que el costo de simplemente escanear toda la tabla.
Si su consulta es de la forma:
Y 1 fila de 1000 tiene el nombre Boris, es casi seguro que se usará. Si el nombre de todos es Boris, probablemente recurrirá a un escaneo de tabla, ya que es poco probable que el índice sea una estrategia más eficiente para acceder a los datos.
Si es una tabla ancha (muchas columnas) y lo hace:
Entonces, aún puede optar por realizar el escaneo de la tabla, si es una suposición razonable de que va a tomar más tiempo recuperar las otras columnas de la tabla que solo buscar el nombre, o nuevamente, si es probable que esté recuperando un muchas filas de todos modos.
fuente
El optimizador juzgará si el uso de su índice hará que su consulta se ejecute más rápido, y si es así, 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 combinaciones de tablas y las declaraciones where
fuente
Al utilizar la columna a la que se aplica el índice dentro de sus condiciones, se incluirá automáticamente. No tiene que usarlo, pero acelerará las consultas cuando se use.
Utilizará el índice apropiado.
fuente
Generalmente, cuando crea un índice en una tabla, la base de datos utilizará 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 particular para ejecutar esta consulta. Puede encontrar más información sobre esto aquí .Index hint
también parece estar disponible para MySQL . Gracias a Tudor Constantine.fuente
La sugerencia de índice solo está disponible para servidores de bases de datos de Microsoft Dynamics. Para SQL Server tradicional, los filtros que defina en su cláusula 'Dónde' deberían persuadir al motor para que use cualquier índice relevante ... Siempre que el plan de ejecución del motor pueda identificar eficientemente cómo leer la información (ya sea un escaneo de tabla completo o un escaneo indexado ) - debe comparar los dos antes de ejecutar la declaración propiamente dicha, como parte de su optimizador de rendimiento integrado.
Sin embargo, puede forzar al optimizador a escanear usando algo como
O buscar un índice en particular usando algo como
La decisión es tuya. Mire las propiedades del índice de la tabla en el panel de objetos para tener una idea de qué índice desea usar. Debe coincidir con su (s) filtro (s).
Para obtener mejores resultados, enumere primero los filtros que arrojarían la menor cantidad de resultados. No sé si estoy en lo cierto al decirlo, pero parece que los filtros de consulta son secuenciales; si obtiene la secuencia correcta, el optimizador no debería tener que hacerlo por usted comparando todas las combinaciones, o al menos no comenzar la comparación con las consultas más caras.
fuente