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

La selección de MySQL parece muy lenta pero no puede pensar en cómo mejorar.

Creo que hay algunos problemas con la consulta y la propia definición de la tabla.

  • Table.name es una columna de caracteres de 4K
  • La consulta se ordena por esa columna

Está ordenando según una columna en la que está almacenando cadenas. Para ordenar por cadenas, se deben realizar comparaciones de cadenas. La comparación de cadenas tiende a ser una operación lenta y, dado el tamaño de la columna que está utilizando, es muy probable que cause un impacto notable en el rendimiento.

No tenemos una indicación del contenido de su name columna y parece difícil pensar en un nombre real que requiera eso muchos personajes.

Si esta cadena tiene varios datos que son conceptualmente diferentes, tal vez la columna debería dividirse en varias columnas separadas, si es posible, y luego normalizarse según corresponda.

Si puede dividir el contenido de esa columna en varios más pequeños y luego usarlos, las comparaciones de cadenas, aunque siguen siendo costosas, serían 'más rápidas' simplemente porque las cadenas que se comparan serán significativamente más cortas de lo que son ahora.

Otra cosa a considerar es si puede optimizar la búsqueda evitando comparaciones de cadenas por completo o evitando consultas que provocarán un escaneo completo de la tabla a pesar de que haya definido índices.

Para eso deberías mirar usando explain con su consulta, para que pueda comprender mejor la Plan de ejecución de consultas

Citando los documentos (mi énfasis):

Editar 1

Has aclarado que tu name la columna es en realidad para notas de usuario. En este caso, creo que debería considerar lo siguiente (además de a lo que ya se ha mencionado):

  1. Cambie el nombre de la columna a algo que se correlacione con su contenido real
  2. Eliminar el índice de la columna
  3. Hacer no use esa columna para buscar, ordenar o cualquier otra operación que no sea simplemente seleccionarla para mostrarla (sería muy raro si necesitaba ser utilizado para cualquier otra cosa, en mi humilde opinión.)
  4. Opcionalmente, considere cambiar la columna a un text escriba y no tendrá que preocuparse tanto por los ensayos de los usuarios se trunca sin previo aviso (a menos que la GUI haya impuesto el mismo límite de longitud de entrada al usuario)