sql >> Base de Datos >  >> RDS >> Mysql

Rendimiento de Mysql en una tabla de 6 millones de filas

Lo que quiere asegurarse es que la consulta utilizará SOLO el índice, así que asegúrese de que el índice cubra todos los campos que está seleccionando. Además, dado que se trata de una consulta de rango involucrada, debe tener el venid primero en el índice, ya que se consulta como una constante. Por lo tanto, crearía e indexaría así:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

Con este índice, toda la información que se necesita para completar la consulta está en el índice. Esto significa que, con suerte, el motor de almacenamiento puede obtener la información sin buscar realmente dentro de la tabla. Sin embargo, es posible que MyISAM no pueda hacer esto, ya que no almacena los datos en las hojas de los índices, por lo que es posible que no obtenga el aumento de velocidad que desea. Si ese es el caso, intente crear una copia de la tabla y use el motor InnoDB en la copia. Repita los mismos pasos allí y vea si obtiene un aumento significativo de velocidad. InnoDB lo hace almacena los valores de campo en las hojas de índice y permite cubrir índices.

Ahora, esperemos que vea lo siguiente cuando explique la consulta:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where