Conocer la estructura de datos de índice de base de datos MySQL que ya no es una condición suficiente da Meng Meng

Al igual que múltiples puntos negrita, es tan grande la producción! Micro-canales de búsqueda número público [ Damocles pluma ] para obtener más recursos, unido al extremo del código de dos dimensiones!
Github dirección: https: //github.com/stt0626/JavaGreat continuó con la actualización de la información incluida

prefacio

  Cuando se trata de la optimización de la base de datos dejar escapar es agregar el índice, si no con el lugar y "desbloquear la base de datos de la serie" índice de la base de datos está listo para usted! Si usted es como yo, nunca he entendido las estructuras subyacentes de datos, índices de bases de datos, los árboles X X fruta ignorantes ignorantes, ignorantes X bajo un árbol para usted y para mí, por favor deje un mensaje para decirme más que yo, y mi sensación mejor corazón en la parte inferior, pero ahora tengo un conocimiento profundo, leer todo el artículo que usted y yo creo, como la niebla en el día con una sonrisa: 就这? Porque es esto, no hablaba mucho comienzo inmediato!

estructura de datos de índice

  índices de bases de datos son principalmente tablas hash, árboles binarios, de color rojo-negro árbol, árbol B, B + árbol, que MySQL utiliza un árbol B +!

índice hash

introducción

  índice hash (índice hash) basado en una tabla hash implementaciones, para cada fila de datos, un motor de almacenamiento se calculan código hash de todas las columnas indexadas (código hash), el código hash es un valor pequeño, todo el índice hash código hash se almacena en el índice, preservando al mismo tiempo un puntero a cada fila de datos en una tabla hash. Si va a utilizar el mismo código hash se almacena en forma de una lista enlazada, similar a HashMap, índice hash es adecuado para las consultas precisas.

por ejemplo

  La siguiente tabla existe
Aquí Insertar imagen Descripción
  si construimos el índice en la columna de nombre, el nombre de la base de datos va a calcular el valor hash de la columna de nombre de cada fila de datos utilizando un algoritmo de hash y se almacena. valores Hash se calculan como al azar, lo que puede haber un conflicto, si el resultado del cálculo como
Aquí Insertar imagen Descripción
  estructura de datos índice hash sigue
Aquí Insertar imagen Descripción

Tenemos un SELECT id, nombre, edad a partir de t_user WHERE nombre = ' pequeña piedra Tim'; Tal SQL directamente a 石小添un valor hash de hashing calculada, para encontrar el puntero de registro correspondiente a este valor, el puntero de registro se encontró en la tabla de los cuales la línea de datos, comparando el apellido si se trata de una pequeña piedra a añadir a garantizar la línea se encuentra.
Pero si tenemos SELECT id, nombre, edad a partir de t_user DONDE nombre> ' para añadir pequeña piedra'; un SQL tales son impotentes, porque la tabla hash 支持快速的精确查询,但是不支持范围查询.

Resumen índice hash

  • índice hash sólo contiene el puntero de fila y un valor hash, sin almacenar el valor del campo, el valor del índice no se puede utilizar para evitar la fila de lectura
  • datos de índice Hash no se almacena en el orden de acuerdo con el valor del índice, por lo que no se puede utilizar para la clasificación
  • parte de índice hash de la columna indexada no soporta las operaciones de búsqueda de concordancia debido índice hash es siempre utilizar todas las columnas indizadas de contenido para calcular un valor hash
  • El índice hash sólo es compatible con el equivalente a la comparación de una consulta, la consulta no es compatible con cualquier rango
  • datos de índice hash de acceso muy rápido, a menos que haya un conflicto Duoha Xi (diferentes valores de columna de índice no es el mismo valor hash). Cuando se produce la colisión de hash, el motor de almacenamiento debe atravesar toda la lista de punteros ligado, línea por línea de comparación fila, hasta que encuentre todas las filas que califican
  • Si el conflicto hash de muchas palabras, algunos de los costos de las operaciones de mantenimiento de índices será alto. Por ejemplo, si una baja selectividad (muchas colisiones hash) en la columna para establecer un índice hash, a continuación, cuando se elimina una fila de la tabla, las necesidades del motor de almacenamiento a través de cada fila de la lista corresponde al valor de hash, y para encontrar eliminar la línea de referencia correspondiente, más conflicto, mayor será el costo

Árbol binario

  Binary Tree (árbol binario) cada nodo tiene como máximo estructura de árbol dos sub-árboles. Subárbol conoce generalmente como "subárbol izquierdo" (subárbol izquierdo), y "subárbol derecho" (subárbol derecho). árbol binario se utiliza a menudo para implementar un árbol binario de búsqueda y una pila binaria.
Aquí Insertar imagen Descripción

por ejemplo

Aquí Insertar imagen Descripción

Identificación del add columnas para almacenar los índices de árbol binario, como se muestra a continuación

Aquí Insertar imagen Descripción

Si nuestros datos es el crecimiento unilateral con el tiempo podría convertirse en una lista de árbol binario, consultamos los datos en la siguiente figura

Aquí Insertar imagen Descripción

Si hay un SQL SELECT id,name,age FROM tb_user WHERE id=7, crear un índice para ese campo y está utilizando un árbol binario para mantener su aspecto de seis veces, y la velocidad para crear el índice no es lo mismo!
Índice del árbol binario en el campo de índice es una escena continua es baja o cuando otras propiedades, y este árbol está fuertemente sesgada desequilibrio, esto nos lleva红黑树

Características Árbol Binario

  • Si su subárbol izquierdo no está vacío, entonces el valor del subárbol izquierdo, todos los nodos son menores que el valor del nodo raíz;
  • Si todo es subárbol derecho de nodos que son mayores que el valor del nodo raíz;
  • Sus subárboles izquierdo y derecho son también una especie de árbol binario

árbol rojo-negro

  Rojo-negro árbol (árbol Negro Rojo) es un nodo y puede contener árbol binario de búsqueda auto-equilibrio de color rojo y negro es un árbol binario equilibrado. Cada nodo almacena un árbol rojo-negro tiene nodos de color, puede ser rojo (rojo) o negro (Negro)

Misma, columnas ID añaden un índice mediante un árbol rojo-negro se almacena, como se muestra a continuación, vamos a encontrar va a hacer un ajuste para que el árbol está relativamente equilibrada, bajo valor que se da en los nodos superiores izquierdo valor más grande de venta sobre el nodo padre derecha

Aquí Insertar imagen Descripción

Lo mismo que para encontrar dos datos 4 y 7, como en la figura.

Aquí Insertar imagen Descripción

Después, está claro que usamos árbol rojo-negro con respecto a un árbol binario, este árbol está más equilibrado, los datos de búsqueda más rápido, MySQL todavía no tienen la estructura de datos para mantener los datos de índice es ¿Por qué? A continuación para analizar a fondo abotonado

negligencia árbol rojo-negro

  • Actualmente hay seis tablas de datos, por lo que es necesario el uso de éstos mantenimiento de los árboles rojo-negro de seis almacenado, entonces la altura de los árboles h = 4, respectivamente, 2,4,6,7 cuatro nodos, no hay ningún problema, a la derecha
  • Los datos que realmente imposible unos artículos son un millón, diez millones de datos, el árbol rojo-negro si se quiere mantener un millón, diez millones de datos, que puede ser árbol rojo-negro de altura h =? Buenas cálculos, si queremos piezas de datos almacenada en una tabla 100W, 100W hay un rojo y negro nodos, cada nodo tiene dos ramas, todo el árbol completo a 2 ^ n = 1.000.000, n h es la profundidad, hacer bien las matemáticas
  • Mediante el análisis de la parte superior, se encontró que el uso de los datos de color rojo-negro índice de mantenimiento de los árboles, este árbol demasiado profundo, demasiado profundo para ~~~
  • Si los datos que usted está buscando en un nodo hoja, a continuación, el número de consultas también encuentran muchos

Cuantas más veces podemos encontrar datos en la parte superior del árbol rojo-negro por la mayoría de la altura de la más alta, más alta es la consulta de datos de árbol necesarios, controlamos la altura del árbol, se puede controlar el número de consultas, este es nuestro árbol a B Albert para completar, por lo que es posible que desee una taza de té, piense en la altura de la base del árbol en la capa de control de árbol rojo-negro 3-5, y luego los datos se almacenan diez millones, si se quiere, ¿cómo?

B-tree

  árbol rojo-negro es un árbol binario y los datos del nodo de almacenamiento, y B es el número de nodos en una tienda de más datos en la base de árbol rojo-negro, los llamados BTree, BTree, árboles B que son la misma cosa , nombre completo Balance-treetraducido 平衡多路查找树, 平衡distribuido uniformemente a la izquierda y la derecha. · 多路Con respecto a un árbol binario, el árbol de búsqueda binaria es bidireccional, cuando se busca sólo dos, mientras que las múltiples rutas de árbol B que tienen varios hijos nodo padre, plug-hablar
Aquí Insertar imagen Descripción

Oh, esto es

Aquí Insertar imagen Descripción

  • Es un nodo superior 18,25,60, 20 y 23 es un nodo, las tiendas de la pluralidad de datos en el mismo nodo
  • los datos son los datos almacenados en ese nodo, si MySQL se utiliza en los datos de árbol B se almacena en la dirección de disco es la ubicación de los datos de la línea que estamos buscando en el disco
  • Para el índice para encontrar el nodo correspondiente, encontrar los datos correspondientes en el nodo, y luego obtener la dirección de disco se pueden encontrar en los datos de línea

Ver almacenamiento de datos B-árbol, después del depósito y un total de cuatro nodos, un nodo de almacenamiento 2,4, un nodo 1, un nodo 3, un nodo 6, 7, 1 1 a 2 horas, de manera que el lado izquierdo 2, 3 2 mayoría de 4 horas, de modo que el lado derecho del lado izquierdo 2 4, 2, 4 en el mismo nodo de almacenamiento, 6,7 grande que 4, se almacena en un lado derecho del nodo 4

Aquí Insertar imagen Descripción

Echar un vistazo a los datos de árbol B, la primera vez que toma los datos directamente al nodo raíz 4, 7 y llegar segundo, para determinar dónde se encuentran los dos nodos

Aquí Insertar imagen Descripción

Características B-Tree

  • B-Tree puede reducir significativamente el historial de ubicaciones intermedia experimentado durante el proceso, por lo que el acceso más rápido. Esta estructura de datos se utiliza generalmente la base de datos de índice, una mayor eficiencia global
  • Dientes conjunto clave distribuye por todo el árbol, cualquier palabra clave aparece una vez y sólo en un punto de unión
  • nodo de datos de izquierda a derecha pedido
  • Hay búsqueda puede terminar en un nodo no hoja, 叶子结点es el grado de nodo es 0没有子结点的结点
  • Buscar la raíz del árbol B de la secuencia de inicio, palabra clave (ordenada) de los nodos dentro de la búsqueda binaria, si se terminó el golpe, de lo contrario vaya al nodo hijo pertenece al alcance de las palabras clave de consulta, que se reitera hasta que el correspondiente hijo puntero es nulo, o ya es un nodo hoja

B + Árbol

  B + Tree es variantes de un B-Tree, MySQL B + Árbol se usa como la estructura de datos de índice, la FIG.
Aquí Insertar imagen Descripción

  • nodos que no son hojas no almacenan datos
  • nodo redundante, nodos hoja contienen todos los nodos que no son hojas
  • Los datos almacenados en los nodos hoja, y la hoja de nodos hay entre los puntos de flecha

B + Árbol de los datos almacenados

Aquí Insertar imagen Descripción

buscar a B + Árbol

Aquí Insertar imagen Descripción

B + Árbol Por qué los nodos hoja almacenar datos de forma redundante

y el almacenamiento de datos espacio necesidades de nodo, si se quita los datos, puede ahorrar más nodos, MySQL utiliza en cada nodo B + Árbol puede almacenar hasta 16 KB de datos puede SHOW GLOBAL STATUS LIKE 'InnoDb_page_size';consultar el SQL esto, en el caso de 16KB MySQL使用B+Tree可以存储更多的索引元素, si bigint tabla ID utiliza como un índice que representa 8Byte, mientras se utiliza el nodo hijo 6Byte grabación a continuación, un campo de índice de situación que representa 8 + 6 = 14Byte, 16KB / 14Byte = 1,170, cada nodo puede almacenar elementos 1170
Aquí Insertar imagen Descripción

B + árbol está lleno de cuánto se pueden almacenar datos

Se calculó la parte superior de cada nodo puede almacenar 1170 elementos, cada nodo tiene también un nodo hijo, si la altura de los árboles 3 cada cuenta de índice para el tamaño de 1 KB, 1 KB Esto ya no es pequeña, se puede almacenar 1170*1170*16=2190Wpiezas de datos, que totalmente se reúnen consultas de millón de tablas de datos de nivel

nodo de la hoja B + Árbol está haciendo corte de pelo

B + nodo no hoja en un nodo de hoja de árbol redundante, y conectado con punteros entre los nodos hoja, comienzo hash no consultas de rango de soporte, la altura del árbol binario es alta, solamente B B + árbol con alguien , nodo del árbol de B puede almacenar una pluralidad de elementos, con respecto a la altura del árbol entero árbol rojo-negro se reduce, la eficiencia es mejorada disco IO. El árbol B + es una versión mejorada del árbol B, basta con ver el no hoja redundancia nodo, beneficio de esto es para mejorar el rango de eficiencia de la búsqueda. La razón para el aumento de no más de un nodo hoja es tener un puntero al siguiente nodo

Características B + Árbol

  • Todas las palabras clave aparecen en la lista de nodos hoja (índice denso), y la lista de palabras clave acaba de pedir
  • En el árbol de B-, basado en el incremento del puntero de lista es un nodo hoja, todas las palabras clave aparecen en un nodo de hoja, los nodos que no son hojas como un nodo de hoja de índice;
  • Árbol B + a un nodo hoja es siempre sólo datos de la visita no puede ser alcanzado en los nodos que no son hojas
  • Más adecuado para el sistema de indexación de documentos
  • elementos de almacenamiento de nodo Más individuales, de modo que el número de IO y consulta del menos, por lo que hace que sea más adecuado como la estructura de datos subyacente de base de datos MySQL

A lo que hemos introducido Hash, árbol binario, rojo-negro árbol, árbol B, B + árbol para cada estructura de datos, y concluyó que el uso de MySQL B + Árbol como la eficiencia IO disco cuando el mantenimiento de la estructura de datos del índice, el índice puede mejorar la consulta y puede mejorar la eficiencia de las consultas de rango, y los elementos del árbol B + está en orden, a continuación, vamos a hablar de dos motores de almacenamiento de MySQL común cómo utilizar índice específico

índice del motor de almacenamiento MyISAM para lograr

Crear una última línea de la tabla MOTOR = MyISAM

CREATE TABLE `tb_myisam` (
  `id` int(11) NOT NULL,
  `col1` varchar(255) DEFAULT NULL,
  `col2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

El almacenamiento en disco

Aquí Insertar imagen Descripción

Después de una tabla MyISAM creará tres archivos en el disco frm, MYD, MYImantenimiento
FRM: estructura de la tabla de almacenamiento
MYD: el almacenamiento de datos de la tabla
MYI: índice de la tabla de almacenamiento

Adición de datos

insert into tb_myisam (id,col1,col2) VALUES
(2,"测试数据2","测试数据22"),
(4,"测试数据4","测试数据44"),
(5,"测试数据5","测试数据55"),
(7,"测试数据7","测试数据77"),
(1,"测试数据1","测试数据11"),
(3,"测试数据3","测试数据33"),
(6,"测试数据6","测试数据66");

Ver datos

SELECT id,col1,col2 FROM tb_myisam

Aquí Insertar imagen Descripción

Puede ver los datos ordenados en el orden de ordenación por inserción

el mantenimiento de índices myisam

Creado en el índice de la columna ID, los datos mantenidos en la esquina superior izquierda de la estructura B + Árbol, en la esquina inferior derecha de los datos de la tabla de datos, B + Árbol de nodos hoja por debajo del punto de almacenamiento de datos es la dirección de la fila correspondiente al disco de datos, agregando que no es un SELECT id FROM tb_myisam WHERE id=3primero al archivo de índice para encontrar el nodo 3, y luego quitar las direcciones corresponde a un archivo de disco MYD, localizar estos datos de línea para consulta.

Aquí Insertar imagen Descripción

motor de almacenamiento InnoDB para lograr índice

Crear una tabla

CREATE TABLE `tb_innodb` (
  `id` int(11) NOT NULL,
  `col1` varchar(255) DEFAULT NULL,
  `col2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

El almacenamiento en disco

Aquí Insertar imagen Descripción

Después de una tabla InnoDB creará dos archivos en el disco frm, ibdel mantenimiento
de frm: estructura de la tabla de almacenamiento de
la EII: mesa de almacenamiento y datos del índice

Adición de datos

insert into tb_innodb (id,col1,col2) VALUES
(2,"测试数据2","测试数据22"),
(4,"测试数据4","测试数据44"),
(5,"测试数据5","测试数据55"),
(7,"测试数据7","测试数据77"),
(1,"测试数据1","测试数据11"),
(3,"测试数据3","测试数据33"),
(6,"测试数据6","测试数据66");

datos de la consulta

Aquí Insertar imagen Descripción

MySQL crear automáticamente un índice de clave principal, innodb motor de búsqueda ordenada por la clave primaria

el mantenimiento de índices InnoDB

motor de almacenamiento InnoDB, archivo de datos de tabla que es el archivo de la EII en sí está de acuerdo con la estructura del archivo de índice organización B + Árbol, nodo hoja contiene un registro de datos completa
Aquí Insertar imagen Descripción

Si no existe un índice de cómo hacer que InnoDB, los datos no se almacenan todavía?

  Debemos dictar sentencia tabla InnoDB debe tener una clave principal, y se recomienda la clave principal para auto incremento uso entero, si la tabla tiene una clave principal que va a añadir un índice en la clave principal para mantener, no especifique la clave principal si crea una tabla, la base de datos su mesa para encontrar que la columna de datos sólo para mantener, si no se encuentra la columna tal, la base de datos por defecto aumentará su propia uno de mantener.
  La primera razón se recomienda el uso de enteros número entero menor espacio de almacenamiento, y la clasificación más rápida comparación, algunas empresas pueden utilizar UUID como clave primaria, etc., UUID es una cadena aleatoria, es necesario convertir en la comparación y luego comparar y ocupación un espacio grande, no se recomienda utilizar
  el incremento automático recomendada porque nosotros los datos de los nodos hoja de izquierda a derecha en orden ascendente, más cómodo al hacer consultas de rango, si su valor es al azar, es posible modificar la estructura de árbol original, conducir a una división, división afecta al rendimiento, se puede ver la figura, por ejemplo, por fin hemos llegado a ver cambios se suman 8
Aquí Insertar imagen Descripción

mirada índice común como?

  Por lo general, no creamos un índice separado en el desarrollo del proyecto, pero varios creación de claves índice común, y ahora, siempre y cuando usted entienda todo el índice común principio subyacente, el principio de optimización de MySQL los índices en línea para ver que se puede ir a comprender los principios subyacentes, en lugar de volver, estoy cosas muy desagradables vuelta, de vuelta terminará pronto olvido aburrido, a continuación es la apariencia del índice de conjuntos
Aquí Insertar imagen Descripción

Supongamos que índice combinado (col1, col2, col3), tres líneas de datos en los cuadrados verdes son para la figura., Respectivamente, de acuerdo col1, col2, col3 tres de clasificación, púrpura otros campos no indexados, donde la articulación se ha de entender el índice es de acuerdo a qué tipo de 最左前缀法则, 为什么索引会失效como así Asegúrese que pensar mucho!

ideas del artículo

"El rendimiento de MySQL alta"
"Dentro de MySQL: motor de almacenamiento InnoDB".

Ven espectadores una pequeña idea verdadera

En primer lugar estoy agradecidos lectores preocupados por 本工具人pensamientos internos, gracias tan preocupado por mí 抹眼泪, o la deja es 好奇, Gracias 关注y 点赞. La segunda es algunas ideas, este artículo realmente pasó mucho tiempo y energía, el principio subyacente de la cosa más investigación se encuentran poco conocidos, con el fin de escribir este artículo, por lo que entendemos esto se añade al primer artículo de una imagen en movimiento , mapa en movimiento la fabricación de software tuvo un punto de esfuerzo, tiempo para aprender a leer no quiere decir también aprendimos una cosa sí mismo Jaja, antes de escribir un blog son en mi blog sobre el uso de la tecnología, porque creo la tecnología puede ser blanco de entrada al maestro avanzó en uno, pero les resulta a la energía es limitada, y la tecnología es empezar en línea se pueden encontrar en todas partes, pero nos gustaría ver algo de él también debería 原理层, 思想层aspectos del artículo para actualizar a sí mismos 进入大厂收割Offer, y no sólo quedarse en la etapa inicial, tenemos que crecer rápidamente, por lo que la parte posterior del artículo se centró en la escritura 原理层, 思想层, 产品, 学习路线y otros aspectos del artículo, se puede ver la entrada de aprendizaje blanco serie de cursos de artículos, trabajo 1--3 de amigos puede mirar en el nivel de los principios, la ideología, la arquitectura del artículo, 5 años o que tus amigos puedan ver el producto, saber cómo diseñar un producto de buena de buena macro, la capacidad limitada de avanzada que hago El odio no viene 好羞耻a cabo, .

La escritura no es fácil, la palabra de código duro, mareos y en ocasiones escribió realmente ni idea, pero ha estado entrando y esperamos ayudar a un amigo como [**] ** No puta blanca, recuerde pulgar hacia arriba, debajo hay un problema o preocupación comentarios públicos añadir amigos señales de micro, amigos QQ, etc. para explorar entre sí y crecer juntos ya no es todavía de pie confundido, ya no por sus colegas a la fricción del suelo, otros ya no Admire, mientras que otros se convierten en el foco

Estamos aquí para preparar los materiales de aprendizaje, enlaces directos se publicarán los operadores de blogs notar hermana pequeña, quiero ser viejo paisaje de hierro del número de preocupación pública, [responder 资料] a!

Además de las líneas de la misma, dos cuadros juntos demasiado brusco, escanear el siguiente código numérico Fanger Wei de la atención pública, el acceso a los recursos de respuesta [información]

resumen

Benpian N explicar la estructura de datos, los principios subyacentes de índices de MySQL, pescado salado listo para convertir esta dirección actualización del blog 世间唯一不变的便是变化, Thaksin es mejor confianza en sí mismo, aprendiendo juntos se puso de pie en el otro lado de la sal
camino es largo Ven, la felicidad y la tierra

Publicado 27 artículos originales · ganado elogios 148 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_36386908/article/details/104730786
Recomendado
Clasificación