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

¿Deberíamos incluir la columna de clasificación, la clave principal en el índice compuesto (MySQL)?

La respuesta depende del motor que utilice:

  • MyISAM - agregar id al índice puede y probablemente ayudará
  • InnoDB:la clave principal ya forma parte de cada índice secundario, porque innodb almacena filas en BTREE ordenadas por clave principal y el índice necesita que la clave principal apunte a la fila real; en ese caso, agregarlo es redundante si es el último en el índice ( pero hacerlo no lo agregará dos veces, por lo que no debería empeorar las cosas). En algunos casos, es posible que desee agregarlo como no último, o tiene varias columnas primarias y agrega algunas columnas a su índice en un orden diferente; no debería haber ningún problema con eso, innodb agregará las columnas restantes de primaria a ese índice, pero puede usar los agregados antes sin duplicarlos)

Entonces responde:

  1. En InnoDB es innecesario, en MyISAM es bueno en caso de que realmente use esa clasificación, si no la usa, agregarla solo hace que el índice sea más grande.
  2. El orden de las columnas en la definición de la tabla y el orden en el índice son cosas separadas, así que está bien
  3. Sí, ese índice parece realmente bueno, pero puede verificarlo usando EXPLICAR , existe la posibilidad de un rendimiento aún mejor - "índice de cobertura ", pero eso tiene un costo, por lo que, a menos que la consulta sea crítica y de bajo rendimiento, probablemente sea una exageración.