Problema:
¿Hay alguna forma de calcular el número de bytes ocupados por la creación de la tabla? Sé que puede obtener información de information_schema.tables, pero esa información no es lo suficientemente precisa.
Lo que realmente se requiere es el número de bytes de acuerdo con la definición de la tabla para innodb únicamente y la clasificación también podría considerarse como utf-8-general-ci
Por ejemplo, una prueba de tabla es la siguiente
crear prueba de tabla
(
col1 varchar (25),
col2 int,
col3 varchar (3),
col4 char (15),
col5 datetime
);
Ahora requeriría saber el tamaño total de la fila que se puede acumular en una fila de acuerdo con los tipos de columnas de la tabla.
Encontré algún tipo de solución similar en MSSQL pero necesito su versión de MySQL
Script para estimar tamaños de fila para cualquier tabla
Cualquier ayuda es muy apreciada.
fuente

Respuestas:
Después de mucho pensar e investigar, encontré una respuesta que realmente ayudó a lograr lo que se requería. Es un script perl y el enlace de referencia es
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
Gracias a todos por la gran ayuda.
fuente
-uUser -pPassa las líneas de comando mysql y mysqldump en el script (o intente en su--defaults-extra-file=/etc/mysql/debian.cnflugar en Ubuntu / Debian) y ejecútelo con una base de datos como primer argumento comoperl test.pl mydatabaseDebe conocer el tamaño en bytes de cada campo de acuerdo con el tipo de datos ( referencia de MySQL aquí ), luego sumar estos valores juntos.
fuente
Paso 1:
20 caracteres ingleses: 2 + 1 * 20
20 caracteres medio-orientales / eslavos: 2 + 2 * 20
20 caracteres asiáticos: 2 + 3 * 20
20 caracteres emoji: 2 + 4 * 20 (y usted necesita
utf8mb4)Paso 2: Súmalos.
Paso 3: multiplique por algún lugar entre 2 y 3 para permitir la sobrecarga de InnoDB. He descubierto que ese factor generalmente funciona. (Pero no para tablas pequeñas, y no necesariamente para tablas particionadas).
No veo ninguna razón para tomar el tamaño máximo de cada columna.
Puede acercarse
SHOW TABLE STATUSo losinformation_schemadatos equivalentes :Paso 1:
SELECT COUNT(*)- us esto en lugar deRowsPaso 2: Obtén
Data_length + Index_length + Data_freePaso 3: Divide.
fuente
SELECT AVG(LENGTH(varchar_col))- Nota:LENGTHya es bytes ; no es necesario multiplicar por 2/3/4. (CHAR_LENGTHobtiene la longitud en caracteres.)Hice un script bash aproximado para calcular el tamaño de la fila y advertir si supera el límite según el esquema:
fuente
Ya hay algunas preguntas de este tipo, por ejemplo, esta: Cómo estimar / predecir el tamaño de los datos y el tamaño del índice de una tabla en MySQL
Una diferencia entre esa pregunta y su tabla es la presencia de cadenas de longitud variable en la suya: recuerde tener en cuenta el tamaño máximo que pueden ser.
También recuerde que desde la versión 5 en adelante,
varchar(25)son hasta 25 caracteres, no hasta 25 bytes, por lo que si es probable que vea caracteres no ASCII en sus cadenas, el tamaño de la columna podría aumentar hasta un máximo de 100 bytes porque algunos caracteres toman cuatro bytes para representar, por ejemplo, "montón de emojis de caca" (que, te digo, no existe), si tu navegador actual + fuente lo admite parece: 💩) es 0xF0 0x9F 0x92 0xA9. Antes de v5, mySQL contaba bytes, no caracteres al especificar longitudes de tipo de cadena.Editar con respecto a la automatización
En términos de automatización del proceso, debe poder derivar toda la información necesaria de las
INFORMATION_SCHEMAtablas de manera similar al script que ha encontrado para MS SQL Server. Consulte https://dev.mysql.com/doc/refman/5.0/en/information-schema.html para obtener documentación que lo cubra.fuente
INFORMATION_SCHEMAtablas deben incluir la información que necesita. Consulte dev.mysql.com/doc/refman/5.0/en/information-schema.html para obtener documentación que lo cubra.