Red de conocimiento del abogados - Respuesta jurídica de la empresa - MySQL de alto rendimiento: tipo cadena (2)

MySQL de alto rendimiento: tipo cadena (2)

Tipo de cadena ( )

Los tipos similares a CHAR y VARCHAR son BINARY y VARBINARY. Almacenan cadenas binarias. Son muy similares a las cadenas normales pero contienen caracteres binarios. almacenado en código de bytes en lugar de relleno de caracteres. El relleno de MySQL BINARY usa \ (cero bytes) en lugar de espacios, y el valor de relleno no se eliminará durante la recuperación.

Cuando es necesario almacenar datos binarios Y espero que eso Estos tipos son muy útiles cuando MySQL usa códigos de bytes en lugar de caracteres para comparar. La ventaja de la comparación binaria no solo se refleja en la sensibilidad entre mayúsculas y minúsculas. MySQL compara cadenas BINARIAS un byte a la vez y se comparan en función del byte. por lo que la comparación binaria es mucho más simple que la comparación de caracteres, por lo que es más rápida

No es prudente ser generoso

La sobrecarga de espacio al usar VARCHAR() y VARCHAR() para almacenar hola es lo mismo Entonces, ¿hay alguna ventaja en usar columnas más cortas?

Resulta que hay una gran ventaja. Las columnas más grandes consumen más memoria porque MySQL generalmente asigna bloques de memoria de tamaño fijo para contener valores internos, especialmente cuando se usa memoria temporal. particularmente malo al ordenar o manipular tablas, y es igualmente malo al ordenar usando tablas temporales de disco

Así que la mejor estrategia es asignar sólo el espacio que realmente necesitas

Tipos BLOB y TEXT

BLOB y TEXT son tipos de datos de cadena diseñados para almacenar grandes cantidades de datos. Se almacenan en modo binario y de caracteres respectivamente.

De hecho, pertenecen a dos conjuntos de datos diferentes. tipos El tipo de carácter de la familia es TINYTEXT SMALLTEXT TEXT MEDIUMTEXT LONGTEXT; el tipo binario correspondiente es TINYBLOB SMALLBLOB BLOB MEDIUMBLOB LONGBLOB BLOB es sinónimo de SMALLBLOB TEXT es sinónimo de SMALLTEXT

A diferencia de otros tipos, MySQL trata cada BLOB. y valor de TEXTO como motor de almacenamiento de procesamiento de objetos independiente, el motor de almacenamiento generalmente realiza un procesamiento especial al almacenar. Cuando los valores BLOB y TEXTO son demasiado grandes, InnoDB utilizará un área de almacenamiento externo especial para el almacenamiento. El valor debe almacenarse en la fila. ~ almacena un puntero en bytes y luego almacena el valor real en el área de almacenamiento externo

La única diferencia entre las familias BLOB y TEXT es que el tipo BLOB almacena datos binarios. sin intercalación ni conjunto de caracteres, mientras que el tipo TEXT Hay conjuntos de caracteres y reglas de clasificación

MySQL ordena las columnas BLOB y TEXT de manera diferente a otros tipos. Solo ordena los primeros bytes max_sort_length de cada columna en lugar de la cadena completa. Si solo necesita ordenar el frente Para una pequeña cantidad de caracteres, puede reducir la configuración max_sort_length o usar ORDER BY SUSTRING (longitud de columna)

MySQL no puede indexar cadenas con la longitud completa de BLOB y TEXT. columnas, ni puede usar estos índices para eliminar la clasificación (sobre Habrá más información sobre este tema en el próximo capítulo)

Tablas temporales de disco y clasificación de archivos

Porque el motor de memoria no admite tipos BLOB y TEXT, si la consulta usa columnas BLOB o TEXT. Y aquellos que necesiten usar tablas temporales implícitas tendrán que usar tablas temporales de disco MyISAM incluso si solo hay unas pocas filas de datos (el motor de memoria del servidor Percona admite BLOB y tipos de TEXTO, pero hasta el momento de escribir este libro, el mismo escenario todavía requiere el uso de tablas temporales de disco)

Esto resultará en

Grave sobrecarga de rendimiento Incluso si MySQL está configurado para almacenar tablas temporales en dispositivos de bloque de memoria (RAMDisk), todavía requiere muchas llamadas costosas al sistema

La mejor solución es evitar el uso de tipos BLOB y TEXT si no se puede evitar. Un truco es usar SUBSTRING (longitud de columna) siempre que se use un campo BLOB para convertir el valor de la columna en una cadena (también aplicable en la cláusula ORDER BY). De esta manera, puede usar una tabla temporal en memoria, pero asegúrese de que. la subcadena interceptada La cadena es lo suficientemente corta como para que el tamaño de la tabla temporal no exceda max_heap_table_size o tmp_table_size. Después de exceder el límite, MySQL convertirá la tabla temporal de memoria en una tabla temporal de disco MyISAM.

Lo peor La asignación de longitud de casos es la misma para la clasificación, por lo que este truco es muy útil para crear tablas temporales grandes y ordenar archivos en la memoria y para crear tablas temporales grandes y ordenar archivos en el disco. Por ejemplo, supongamos que hay una tabla con 10,000 filas ocupadas. varios GB de espacio en disco Entre ellos se encuentran: Una columna VARCHAR() con un juego de caracteres UTF usa como máximo bytes por carácter y en el peor de los casos requiere bytes de espacio si esta columna se usa en un ORDER BY y la consulta escanea el. tabla completa para ordenar, requerirá más de GB de tabla temporal

Estas tres filas de datos en realidad se almacenan como números enteros en lugar de cadenas. Puede ver este atributo dual recuperando el entorno de contexto numérico

Volver al catálogo MySQL de alto rendimiento

Editar recomendado

Se revela el marco ASP NET MVC

?Tecnología de índice Oracle

Videotutorial de capacitación sobre desarrollo de ASP NET lishixinzhi/Article/program/MySQL/201311/29686