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 grupos diferentes de datos. 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 el disco MyISAM.
Esto es cierto para las tablas temporales incluso si solo hay unas pocas filas de datos (el motor de memoria del servidor Percona admite tipos BLOB y TEXT, pero hasta el momento de escribir este libro, el mismo escenario todavía requiere el uso de tablas temporales de disco) p>
Esto puede tener graves consecuencias. Sobrecarga de rendimiento Incluso si MySQL está configurado para almacenar tablas temporales en dispositivos de bloque de memoria (RAMDisk), aún requiere muchas llamadas costosas al sistema.
La mejor solución es evitar usando tipos BLOB y TEXT si es posible. Si es inevitable tener un El truco consiste en usar SUBSTRING (longitud de columna) siempre que se use un campo BLOB para convertir el valor de la columna en una cadena (esto también funciona en la cláusula ORDER BY). De esta manera, puede usar una tabla temporal en memoria, pero asegúrese de que la subcadena sea 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 en memoria. una tabla temporal de disco MyISAM
La asignación de longitud en el peor de los casos es la misma para la clasificación, por lo que este truco es útil tanto para crear tablas temporales grandes y ordenar archivos en la memoria como para crear tablas temporales grandes y ordenar archivos en disk Por ejemplo, supongamos que hay una tabla con 10,000 filas que ocupan varios GB de espacio en disco. Hay un utf en ella. La columna VARCHAR() del conjunto de caracteres usa como máximo bytes por carácter y requiere bytes de espacio en el peor de los casos. caso Si esta columna se usa en ORDER BY y la consulta escanea toda la tabla para ordenarla, se requerirá una tabla temporal de más de GB
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
Recomendación del editor
Se revela el marco ASP NET MVC . p>
?Tecnología de índice Oracle
Videotutorial de capacitación sobre desarrollo de ASP NET lishixinzhi/Article/program/MySQL/201311/29686