Estoy un poco avergonzado de preguntar esto ya que he estado trabajando con MySQL durante años, pero bueno.Índices múltiples e individuales
Tengo una tabla con dos campos, a
y b
. Me va a correr las siguientes consultas en él:
SELECT * FROM ... WHERE A = 1;
SELECT * FROM ... WHERE B = 1;
SELECT * FROM ... WHERE A = 1 AND B = 1;
Desde el punto de vista del rendimiento, es al menos una de las siguientes configuraciones de los índices más lentos para al menos una consulta? Si es así, por favor elabora.
ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b);
ALTER TABLE ... ADD INDEX (a, b);
ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b); ALTER TABLE ... ADD INDEX (a, b);
Gracias (en cuenta que estamos hablando de los índices no únicos)
¿Y hay alguna ventaja de ir con la configuración n. ° 3 en lugar de n. ° 1? –
Sí, podría haber una ventaja. Un índice compuesto puede convertirse en un índice de cobertura, cuando todos los datos en la consulta se mantienen dentro del índice mismo. En general, 'SELECT A, B FROM ... WHERE A = 1;', será más rápido si utiliza el índice compuesto en '(A, B)', ya que la consulta no necesitará obtener ningún dato de la tabla . Los datos ya están en el índice. –
Recuerde que los índices ocupan espacio y pueden comprometer un poco el rendimiento en las inserciones y actualizaciones. Me gustaría ir con la opción 3 solo si su aplicación va a hacer consultas que justifiquen el índice adicional ... Consejos sobre un índice de cobertura: http://www.sql-server-performance.com/tips/covering_indexes_p1.aspx –