Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:ottieni le voci più recenti precedenti a xxx, Performance

Vuoi un indice composito su (objectID, time) :

ALTER TABLE my_table ADD INDEX (objectID, time)

La ragione di ciò è che MySQL può quindi recuperare il massimo time per ogni objectID direttamente dall'albero dell'indice; può quindi anche utilizzare lo stesso indice per unirsi nuovamente alla tabella per trovare il massimo per gruppo record utilizzando qualcosa come la tua seconda query (ma uno dovrebbe unirsi su entrambi objectID e time —Mi piace usare un NATURAL JOIN in casi come questo):

SELECT *
FROM   my_table NATURAL JOIN (
  SELECT   objectID, MAX(time) time
  FROM     my_table
  WHERE    time <= 1353143351
  GROUP BY objectID
) t