Mysql's InnoDB engine-5. Índice (2)

B + índice de árbol

La esencia del índice de árbol B + es la realización del árbol B + en la base de datos. Sin embargo, una característica del índice de árbol B + en la base de datos es un alto despliegue, por lo que en la base de datos, la altura de la capa del árbol B + generalmente está en la segunda a la cuarta capa, lo que significa que consultar un cierto valor clave del registro de fila necesita como máximo 2 a 4 veces IO. El índice de árbol B + se divide en índice agrupado e índice auxiliar .

Índice agrupado

El índice agrupado es construir un árbol B + de acuerdo con la clave primaria de la tabla de datos. Al mismo tiempo, los nodos hoja almacenan los datos de registro de fila de toda la tabla, y los nodos hoja del índice agrupado también se convierten en páginas de datos.

El almacenamiento del índice agrupado no es físicamente continuo, sino lógicamente continuo.

  • Las páginas están conectadas por una lista doblemente vinculada, y las páginas están ordenadas en el orden de la clave primaria.
  • Los registros en cada página también se mantienen a través de una lista doblemente vinculada, y el almacenamiento físico también se puede almacenar sin seguir la clave principal.

Índice secundario

Los índices auxiliares también se denominan índices no agrupados y los nodos hoja no contienen todos los datos de los registros de filas. Además del valor clave del nodo hoja, la fila de índice en cada nodo hoja también contiene un marcador.

El marcador se utiliza para indicarle al motor de almacenamiento InnoDB dónde encontrar los datos de fila correspondientes al índice. El contenido específico almacenado es la clave del índice agrupado.

La existencia del índice secundario no afecta la organización de los datos en el índice agrupado, por lo que cada tabla puede crear múltiples índices secundarios. Al consultar datos a través del índice secundario, InnoBD primero consulta la clave primaria del índice de clave primaria a través del índice secundario y luego pasa la clave primaria Índice para encontrar un registro de fila completo.

Gestión de índices

Crear o eliminar índices a través de Alterar tabla o crear / soltar índice. Puede verificar el índice de una tabla mediante show index from table_name. El resultado es el siguiente:

  • Tabla: el nombre de la tabla donde se encuentra el índice
  • Non_unique: índice no único, primary_key es 0, si el índice no único es 1,
  • Key_name: el nombre del índice
  • Seq_in_index: la posición de la columna en el índice
  • Column_name: el nombre de la columna de índice
  • Colación: cómo se almacena la columna en el índice, puede ser A o NULL. El índice del árbol B + es A, que está ordenado. NULL significa no ordenado (como el índice de hash adaptativo)
  • Cardinalidad: representa el valor estimado de los datos que son consistentes en el índice. Cardinalidad / El número de filas de la tabla es lo más cercano posible a 1. Si es muy pequeño, la importancia de este índice es muy pequeña.
  • Subparte: si se trata de un índice parcial de la columna, si no es NULL, significa indexar los primeros N caracteres de una columna.
  • Empaquetado: cómo se comprimen las palabras clave. Si no hay compresión, NULL
  • NULL: si la columna de índice contiene valores NULL, en caso afirmativo, significa que se pueden permitir valores NULL
  • Index_type: tipo de índice, InnoDB solo admite el índice de árbol B +
  • Comentario: información del comentario

Cardinalidad

El valor de Cardinalidad indica el valor estimado de los datos que no se registran repetidamente en el índice. La cardinalidad / n filas en la tabla debe estar lo más cerca posible de 1.

La cardinalidad estadística se realiza mediante muestreo. La actualización de las estadísticas de Cardinality ocurre durante las operaciones de Insertar o Actualizar, pero no se actualiza cada vez. La estrategia de actualización es:

  • Los datos en 1/16 de la tabla han cambiado.
  • stat_modified_counter> 2000000000 (stat_modified_counter se usa para registrar el número de cambios)

El muestreo de cardinalidad se basa en los 8 nodos de hoja del índice, y luego se calcula el total de todos los nodos de hoja a través de los 8 nodos para obtener el valor de Cardinalidad, por lo que el valor obtenido cada vez no es exacto y no cambia.

La fórmula de cálculo Cardinalidad = (P1 + P2 + .... + P8) * A / 8    P son los nodos de muestreo 1-8, A es el número de nodos hoja.

Nota: Si la tabla es lo suficientemente pequeña, entonces el nodo hoja índice de la tabla es menor o igual que 8, entonces el valor calculado cada vez será el mismo.

Otros contenidos de Index

Creación rápida de índices

Antes de 5.5, la base de datos Mysql agregaba o eliminaba tales operaciones DDL, el proceso es:

  • Primero cree una tabla temporal, la estructura de la tabla es la estructura recién definida a través de la tabla alter
  • Luego importe los datos de la tabla original en la tabla temporal
  • Luego borre la tabla original
  • Finalmente, la tabla temporal se nombra como el nombre de la tabla original

Si dicha operación se realiza en una tabla muy grande, el rendimiento se pierde en gran medida. Por lo tanto, el método de creación de índice de Fast Index Creation (FIC) es lo primero.

Para la creación de índices auxiliares, agregue bloqueos S a las tablas correspondientes. No es necesario reconstruir la tabla durante la creación del índice. Para eliminar el índice, simplemente actualice la vista interna, marque el espacio del índice auxiliar como disponible y elimine la definición del índice de la tabla en la vista interna en la base de datos Mysql.

Nota: El directorio creado por la tabla temporal se establece mediante el parámetro tmpdir, para garantizar que haya suficiente espacio para crear la tabla temporal. Durante la operación FIC, se agrega el bloqueo S, por lo que solo se pueden leer los datos en este momento.

Cambio de esquema en línea

Proceso de cambio de arquitectura en línea (OSC):

  • init: etapa de inicialización, trabajo de verificación, hay verificación de activación de clave externa de clave primaria, etc.
  • createCopyTable: crea una nueva tabla que es igual a la tabla original
  • alterCopyTable: Altere las operaciones para crear nuevas tablas, como agregar nuevos índices o columnas
  • createDeltasTable: crea una tabla de deltas. Para crear un desencadenador, las operaciones DML en la tabla original se registrarán en deltas.
  • createTriggers: crea disparadores. El registro generado por la operación de activación se escribe en la tabla deltas.
  • startSnpshotXact: inicia la transacción de operación OSC.
  • selectTableIntoOutFile: escriba los datos de la tabla original en una nueva tabla (para reducir el tiempo de bloqueo de la tabla original, envíe los datos a múltiples archivos externos mediante fragmentación, la fragmentación predeterminada 500000)
  • dropNCIndexs: antes de importar la nueva tabla, elimine todos los índices auxiliares en la nueva tabla
  • loadCopyTable: importe los datos de fragmentos exportados a una nueva tabla.
  • replayChanges: los registros de la operación DML de la tabla original en el proceso OSC se aplican a la nueva tabla y estos registros se guardan en deltas.
  • recrearNCIndexs: recrear índices secundarios
  • replayChanges: vuelva a reproducir los registros DML. Estos registros se generan nuevamente durante el proceso anterior de creación de índices auxiliares.
  • swapTables: intercambia el nombre de la tabla original y la nueva tabla. Se deben bloquear dos tablas y no se permiten datos nuevos. (Debido a que el cambio de nombre es una operación rápida, el tiempo de bloqueo es muy corto)

DDL en línea

Después de 5.6, se admite DDL en línea, y las siguientes operaciones se pueden resolver a través de DDL en línea:

  • Creación y eliminación de índices auxiliares.
  • Cambiar el valor de aumento propio
  • Agregar o eliminar restricciones de clave externa
  • Renombrar columna

El contenido gramatical específico está relacionado, consulte el blog:  https://www.cnblogs.com/cchust/p/4639397.html

 

Supongo que te gusta

Origin www.cnblogs.com/wangb0402/p/12745341.html
Recomendado
Clasificación