MySQL de alto rendimiento (3): optimización de esquemas y tipos de datos

Inserte la descripción de la imagen aquí

Elija el tipo de datos optimizado

Hay muchos tipos de datos compatibles con MySQL y elegir el tipo de datos correcto es esencial para un alto rendimiento.

Los siguientes principios simples pueden ayudar a tomar mejores decisiones:

更小的通常更好
简单就好
避免NULL

El motor de almacenamiento predeterminado en este artículo es InnoDB


Tipo entero

Hay dos tipos de números: números enteros y números reales.
Si almacena enteros, puede utilizar estos tipos de enteros: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT. Utilice espacio de almacenamiento de 8, 16, 24, 32 y 64 bits, respectivamente. Se pueden almacenar en el rango de -2^(N-1) a 2^(N-1)-1.

El tipo de entero tiene un atributo UNSIGNED opcional, lo que significa que no se permiten valores negativos, lo que puede duplicar aproximadamente el límite superior de números enteros. Los tipos firmados y no firmados utilizan el mismo espacio de almacenamiento y tienen el mismo rendimiento, por lo que puede seleccionar el tipo apropiado según la situación real.

Para números reales, DECIMAL.


Tipo de cadena

VARCHAR y CHAR son los principales tipos de cadenas.

VARCHAR:
generalmente se utiliza para almacenar cadenas de longitud variable y es el tipo de datos de cadena más común. Ahorra más espacio que el tipo de longitud fija porque solo usa el espacio necesario.
VARCHAR utilizará uno o dos bytes para almacenar el tamaño del espacio, pero debido a que la fila es de longitud variable, es más problemático durante la ACTUALIZACIÓN. Si el espacio ocupado por una fila crece, pero no hay más espacio para usar en esta página, InnoDB necesitará dividir la página para que la fila encaje en la página.

En este caso, es adecuado usar VARCHAR:
la longitud máxima de la columna de cadena es mucho mayor que la longitud promedio; las
actualizaciones de la columna son pocas, por lo que la fragmentación no es un problema; el
uso de un juego de caracteres complejo como UTF-8 , cada carácter utiliza un número diferente de bytes almacenados.

CHAR: El
tipo CHAR es de longitud fija. Al almacenar valores CHAR, MySQL eliminará todos los espacios finales. Los valores CHAR se llenarán con espacios según sea necesario para facilitar la comparación.

CHAR es adecuado para almacenar cadenas muy cortas o todos los valores están cerca de una longitud. Para valores que cambian con frecuencia, CHAR también es mejor que VARCHAR, porque los tipos CHAR de longitud fija no son propensos a la fragmentación. Para columnas muy cortas, CHAR también es más eficiente que VARCHAR. Por ejemplo, cuando se almacena un carácter, VARCHAR también tiene un byte para registrar la longitud.


Para reiterar: cómo se almacenan los datos depende del motor de almacenamiento, y en este artículo solo hablamos de InnoDB


Tipos de BLOG y TEXTO

Tanto BLOG como TEXT son tipos de datos de cadena diseñados para almacenar grandes cantidades de datos y se almacenan en modo binario y de cadena respectivamente.

Pertenecen a dos familias de tipos de datos diferentes:
TINYTEXT, SMALLTEXT, TEXT, MEDIUMTEXT, LONGTEXT
TINYBLOG, SMALLBLOG, BLOG, MEDIUMBLOG, LONGBLOG


Use enumeración (ENUM) en lugar de cadena

A veces, puede usar columnas enumeradas en lugar de los tipos de cadenas de uso común.
Las columnas de enumeración pueden almacenar algunas cadenas únicas en una colección predefinida. MySQL es muy compacto al almacenar enumeraciones y se comprimirá en uno o dos bytes según el número de valores de la lista. MySQL guardará internamente la posición de cada valor en la lista como un número entero y lo almacenará en el archivo .frm del Guardar la tabla de búsqueda de la relación de mapeo "número-cadena".

Aquí hay una castaña:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Intente evitar el uso de números como constantes de enumeración ENUM.


Problemas en el diseño de esquemas MySQL

Aunque existen algunos principios de diseño buenos o modificados, también existen algunos problemas causados ​​por el mecanismo de implementación de MySQL, lo que significa que es posible cometer algunos errores específicos que solo ocurren bajo MySQL.

1. Demasiadas columnas
El costo operativo de convertir columnas codificadas en estructuras de datos del búfer de filas es muy alto.
Si planea utilizar miles de campos, debe tener en cuenta que el rendimiento y las características operativas del servidor variarán.

2. Demasiadas asociaciones
Si desea que la consulta se ejecute rápidamente y con buena simultaneidad, es mejor asociar una sola consulta dentro de 12 tablas.

3. La enumeración Todopoderosa
debe evitar el uso excesivo de la enumeración.


Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_43762191/article/details/113958072
Recomendado
Clasificación