Optimización del diseño de la base de datos mysql

Optimización del tipo de campo de la tabla de base de datos

Utilice el menor espacio de almacenamiento posible para almacenar los datos de un campo;

  • Intente reducir la longitud cuando utilice el tipo varchar.
  • Es mejor usar el tipo int para la dirección IP.
  • El tipo de longitud fija es mejor utilizar char, por ejemplo: código postal.
  • No use smallint, int si puede usar tinyint.
  • Es mejor darle a cada campo un valor predeterminado, preferiblemente no nulo.
  • Usando tipos de datos simples, int es más fácil de manejar en mysql que los tipos varchar. (El tiempo de almacenamiento de tipo int es la mejor opción)
  • Utilice not null para definir campos tanto como sea posible. (Determinado por las características de innodb, los valores no nulos requieren almacenamiento adicional en el campo y también aumentarán la sobrecarga de E / S y almacenamiento)
  • Intente usar el tipo de texto lo menos posible, y es mejor considerar la subtabla cuando sea absolutamente necesario.

Principios de diseño de bases de datos MYSQL

Principios básicos

  • No realice operaciones en la base de datos;
  • El cálculo de la CPU debe trasladarse a la capa empresarial;
  • Controle el número de columnas;
  • Equilibrar paradigma y redundancia (la eficiencia es lo primero; el paradigma a menudo se sacrifica);
  • Rechazar declaración SQL grande: SQL grande, rechazar transacción grande: transacción grande, rechazar lote grande: lote grande;

Principio de clase de campo

  • Conversión de caracteres en números: la mejor conversión que se puede convertir, que también ahorra espacio y mejora el rendimiento de las consultas;
  • Evite el uso de campos NULL (los campos NULL son difíciles de consultar y optimizar, los índices de campo NULL requieren espacio adicional y los índices compuestos en los campos NULL no son válidos);
  • Use menos tipo de texto (intente usar varchar en lugar de campo de texto);

Principio de índice

  1. Utilice índices de forma razonable (mejore las consultas, ralentice las actualizaciones y más índices no debe ser mejor);

  2. Índice de prefijo para campos de caracteres;

  3. No realice operaciones de columna en el índice;

  4. La clave primaria innodb recomienda el uso de columnas de incremento automático (la clave primaria establece un índice agrupado, la clave primaria no debe modificarse y la cadena no debe usarse como clave primaria);

principio de clase sql

  1. La declaración sql es lo más simple posible;

  2. Asuntos simples;

  3. Evite usar trig / func (programa cliente en su lugar);

  4. No es necesario seleccionar * (consumo de cpu, io, memoria, ancho de banda);

  5. O puede reescribirse como IN

Caso

conversión de tiempo de almacenamiento de tipo int

Use int para almacenar la fecha y la hora, use FROM_UNIXTIME (), UNIX_TIMESTAMP () dos funciones para convertir.
Crear mesa

create table test_time(
id int primary key auto_increment,
time_int int
);

Datos de importacion

insert into test_time(time_int) values (UNIX_TIMESTAMP('2020-05-29 18:00:00'));

Consultar datos, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Conversión de tiempo:

select FROM_UNIXTIME(time_int) from test_time;

Inserte la descripción de la imagen aquí
1. La función UNIX_TIMESTAMP () convierte datos en formato de fecha a tipo int
2. La función FROM_UNIXTIME (timestr) convierte el tipo int en formato de hora

El almacenamiento de la dirección IP
en nuestras aplicaciones externas debe registrar la dirección IP. En la mayoría de los casos, se usa varchar (15) para el almacenamiento, que requiere 15 bytes para el almacenamiento, pero bigint solo requiere 8 bytes para el almacenamiento. Cuando la cantidad de datos es grande (decenas de millones de datos), la diferencia es de 7 bytes.

Use bigint (8) para almacenar la dirección IP y use INET_ATON () e INET_NTOA () para convertir.
Crear mesa

create table sessions(
id int auto_increment,
ipaddress bigint,
primary key (id)
);

Datos de importacion:

insert into sessions (ipaddress)values (inet_aton('192.168.0.1'));

Ver directamente
Inserte la descripción de la imagen aquí

Conversión

select inet_ntoa(ipaddress) from sessions;  

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42494845/article/details/108735187
Recomendado
Clasificación