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 el valor de TEXTO como motor de almacenamiento de procesamiento de objetos independiente, 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. que se almacenará 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. o 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. solo necesita ordenar el frente. Para una pequeña cantidad de caracteres, puede reducir la configuración de max_sort_length o usar ORDER BY SUSTRING (longitud de la columna)
MySQL no puede indexar cadenas con la longitud completa de las columnas BLOB y TEXT , 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 no admite tipos BLOB y TEXT, si la consulta usa columnas BLOB o TEXT. Y aquellos que necesitan 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 p>