sql >> Base de Datos >  >> RDS >> Mysql

CLAVE PRINCIPAL aleatoria para Innodb

MySQL no "reconstruye" el índice en cada inserción.

El tamaño de página predeterminado de MySQL es 16K. Asigna estas páginas en incrementos de 1 MB (llamados extensiones).

Cuando se crea una tabla por primera vez (se reconstruyen los índices), las páginas se llenan 15/16, dejando espacio para algunas inserciones aleatorias (1k de espacio). Si sus entradas de índice son de 500 bytes cada una (tamaño de clave principal + datos de fila para un índice agrupado), eso deja espacio para insertar 2 nuevas filas antes de tener que dividir la página.

MySQL mantiene el valor del registro más alto y más bajo en el encabezado de la página, por lo que los registros dentro de un cierto rango van en la misma página.

Cuando MySQL necesita insertar una fila en una página completa, la página debe dividirse. MySQL agregará una nueva página y moverá la mitad de los datos de la página a la nueva página.

Dentro de una página, es posible que los registros no estén realmente en orden físico. Estarán en el orden en que fueron insertados. Están vinculados en orden a través de una forma de lista vinculada. Por lo tanto, incluso una inserción aleatoria, fuera de la necesidad de dividir la página, no hace que los datos se muevan físicamente.

Después de muchas inserciones aleatorias, sus páginas estarán de 1/2 llenas a llenas. Un índice con muchas páginas a la mitad afectará negativamente el rendimiento de lectura (tiene que leer dos páginas a la mitad para leer la misma cantidad de registros que una página completa de 15/16).

Ahora, si está insertando filas en orden de índice, entonces MySQL simplemente continúa agregando al final de las páginas, llenándolas 15/16 y agregando una extensión a la vez de páginas. Mucho menos penalización en el rendimiento ya que no hay división de páginas, por lo tanto, no hay movimiento de datos, sin mencionar el beneficio de rendimiento de lectura de páginas casi completas.

Las inserciones aleatorias también aumentan la fragmentación de las páginas, lo que puede afectar el rendimiento de lectura si lee con frecuencia una gran cantidad de registros secuenciales (poco frecuente).

Además, cambiar almacenamiento en búfer puede afectarle.