Aquí es la consulta:

SELECT * FROM table WHERE accountid = 1 ORDER BY logindate DESC LIMIT 1

Ahora si he añadido un índice con varias columnas en los campos:

INDEX(accountid,logindate)

Sería MySQL tomar ventaja de esta múltiple índice de columna? O es que no lo uso porque uno es de campo en la cláusula where y el otro está en un orden de declaración? O no importa el tiempo que yo uso los campos en el orden de varias índice de columna?

InformationsquelleAutor John | 2012-10-04

1 Comentario

  1. 55

    Buena pregunta.

    Los índices de trabajo de izquierda a derecha, por lo que su WHERE de los criterios a utilizar el índice. El tipo podría también utilizar el índice en este caso (plan de ejecución a continuación).

    De la manual:

    El índice también puede ser usado incluso si la ORDER BY no coincide con el índice exactamente, siempre y cuando todas las partes no utilizadas del índice y todos los extras ORDER BY columnas son constantes en el WHERE cláusula. Las siguientes consultas utilizar el índice para resolver el ORDER BY parte:

    SELECT * FROM t1
    WHERE key_part1=constant
    ORDER BY key_part2;

    Si tuviera un único índice de columna (accountid), un filesort sería usado en su lugar. Por lo tanto, su consulta no se benefician de ese índice.


    Dos Índices De Columna

    create table t1 (
      accountid tinyint,
      logindate date);
    
    create index idx on t1 (accountid, logindate);
    
    insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
        (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), 
        (1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')

    Plan De Ejecución

    ID SELECT_TYPE TIPO DE TABLA POSSIBLE_KEYS CLAVE KEY_LEN REF FILAS FILTRADAS EXTRA 
    1 SIMPLE t1 ref idx idx 2 const 5 100 el Uso de donde, Usando el índice de

    Sola Columna Índice

    create table t1 (
      accountid tinyint,
      logindate date);
    
    create index idx on t1 (accountid);
    
    insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
        (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'), 
        (3, '2012-10-19'), (1, '2012-03-01')

    Plan De Ejecución

    ID SELECT_TYPE TIPO DE TABLA POSSIBLE_KEYS CLAVE KEY_LEN REF FILAS FILTRADAS EXTRA 
    1 SIMPLE t1 rango de idx idx 2 5 100 el Uso de dónde; el Uso de filesort

Dejar respuesta

Please enter your comment!
Please enter your name here