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

¿Importa el orden de los campos del índice de varias columnas en MySQL?

Cuando hablo de índices de varias columnas, utilizo una analogía con una guía telefónica. Una guía telefónica es básicamente un índice sobre el apellido, luego el nombre. Entonces, el orden de clasificación está determinado por qué "columna" es la primera. Las búsquedas se dividen en algunas categorías:

  1. Si busca personas cuyo apellido es Smith, puede encontrarlas fácilmente porque el libro está ordenado por apellido.

  2. Si busca personas cuyo primer nombre es John, la guía telefónica no ayuda porque los John están dispersos por todo el libro. Tienes que escanear toda la guía telefónica para encontrarlos a todos.

  3. Si busca personas con un apellido específico Smith y un nombre específico John, el libro ayuda porque encuentra a los Smith ordenados juntos, y dentro de ese grupo de Smith, los John también se encuentran ordenados.

Si tuviera una guía telefónica ordenada por nombre y luego por apellido, la clasificación de la guía le ayudaría en los casos n.° 2 y n.° 3 anteriores, pero no en el caso n.° 1.

Eso explica casos para buscar valores exactos, pero ¿qué pasa si buscas por rangos de valores? Supongamos que desea encontrar a todas las personas cuyo primer nombre es John y cuyo apellido comienza con 'S' (Smith, Saunders, Staunton, Sherman, etc.). Los Johns están ordenados bajo 'J' dentro de cada apellido, pero si quiere todos los Johns para todos los apellidos que comienzan con 'S', los Johns no se agrupan. Están dispersos nuevamente, por lo que termina teniendo que escanear todos los nombres con apellido que comienza con 'S'. Mientras que si la guía telefónica estuviera organizada por nombre y luego por apellido, encontraría todos los Juanes juntos, luego dentro de los Juanes, todos los apellidos 'S' estarían agrupados juntos.

Entonces, el orden de las columnas en un índice de varias columnas definitivamente importa. Un tipo de consulta puede necesitar un cierto orden de columnas para el índice. Si tiene varios tipos de consultas, es posible que necesite varios índices para ayudarlos, con columnas en diferentes órdenes.

Puede leer mi presentación Cómo diseñar índices, de verdad para más información.