índices primarios Vs índices secundarios: diferencias de desempeño

Tengo una pequeña pregunta: ¿cuál es la diferencia de rendimiento entre los índices primario y secundario? ¿Qué causa esta diferencia?

Estoy buscando en Google y he visto que los índices secundarios se almacenan en otra tabla, por lo que esto ralentiza todas las operaciones ... pero ¿hay otras razones que justifiquen esta disminución en el rendimiento?

Muchas gracias

preguntado el 03 de mayo de 12 a las 09:05

¡muchas gracias! ahora los leeré. -

1 Respuestas

Una tabla agrupada es un B-Tree sin una porción de "montón": las filas se almacenan directamente en la estructura B-Tree del índice de agrupación (clave principal). Los nodos del B-Tree se pueden dividir o fusionar, por lo que la ubicación física o las filas pueden cambiar, por lo que no podemos tener un "puntero" simple desde un índice secundario a las filas, por lo que el índice secundario debe incluir una copia completa de los campos de índice principal para poder identificar filas de manera confiable.

Esto es cierto para Oracle, MS SQL Server y es también es cierto para InnoDB.

Lo que significa que los índices secundarios en las tablas agrupadas son "más gruesos" que los índices secundarios en las tablas basadas en montón, que:

  • reduce la agrupación de datos,
  • reduce la efectividad del caché,
  • los hace más caros de mantener,
  • y lo más importante, tiene consecuencias en el rendimiento de las consultas:
    • La consulta a través de un índice secundario puede requerir una doble búsqueda: una búsqueda a través del índice secundario para ubicar los datos "clave" y otra a través del principal, para ubicar la fila en sí (Oracle tiene algunas optimizaciones interesantes para evitar la segunda búsqueda, pero InnoDB no , que yo sepa).
    • Por otro lado, el índice secundario naturalmente cubre más campos, por lo que la segunda búsqueda podría evitarse por completo donde un índice tradicional basado en montón requeriría un acceso a la tabla. Sin embargo, se puede lograr el mismo efecto en el índice basado en montón, simplemente agregando más campos.

Déjame citar ¡Usa el índice, Luke!: "Las ventajas de las tablas organizadas por índices y los índices agrupados se limitan principalmente a las tablas que no necesitan un segundo índice".

Lo cual es una pena, ya que MySQL no le permite elegir la agrupación en clústeres independientemente del motor de almacenamiento.

contestado el 23 de mayo de 12 a las 13:05

La publicación sobre Use The Index. Lucas! fue muy bueno. Se aclararon muchas ideas sobre el índice de agrupamiento y los índices secundarios. ¡Gracias! - Maestro V

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.