¿Por qué MongoDB usa índices de árbol B mientras que Mysql usa índices de árbol B+?
De hecho, en la base de datos MySQL, muchos motores de almacenamiento utilizan árboles B+, incluso si sus nombres parecen ser BTREE.
4.1 Mecanismo de indexación de innodb
Primero, tomemos el motor de almacenamiento innodb como ejemplo para ver cómo el motor innodb utiliza árboles B+ para crear índices
Primero, cree una tabla .zodiac e inserte algunos datos
Luego, cree una tabla de datos .zodiac:zodiac e inserte algunos datos
Para innodb, solo hay un archivo de datos, el El archivo de datos en sí está organizado en forma de árbol B+. La clave de cada nodo en el árbol B+ es la clave principal de la tabla, por lo que el archivo de datos del innodo en sí es el archivo de índice principal, como se muestra en la figura siguiente. , las hojas de las páginas de índice principal (páginas hoja) contienen registros de datos, mientras que los nodos que no son hoja contienen solo claves primarias. El término "agrupación" significa almacenar filas de datos y claves adyacentes de forma compacta, por lo que dichos índices se denominan índices agrupados o índices agregados.
Este tipo de índice mejora la velocidad de acceso a los datos porque el índice y los datos se almacenan en el mismo árbol B, y recuperar datos de un índice agrupado suele llevar más tiempo que recuperar datos de un índice no agrupado. -índice agrupado rápido.
Por lo tanto, se puede decir que los archivos de datos de innodb están organizados según la clave principal, por lo que la tabla creada en el motor innodb debe especificar la clave principal si la clave principal no se especifica explícitamente. , el motor innodb seguirá especificando implícitamente la clave principal Definida como un índice agrupado para esta tabla.
De manera similar, el índice auxiliar de innodb es como se muestra en la siguiente figura. Se supone que los caracteres están ordenados en el orden del zodíaco (de hecho, no sé cómo implementarlo). No me importan estos detalles, solo para dar un ejemplo), y sus nodos hoja también contienen la clave principal del registro, por lo que el motor innodb consultará el índice auxiliar dos veces, primero obtendrá el valor de la clave principal a través del índice auxiliar. y luego consultar el índice principal. Por lo tanto, el motor innodb consultará el índice secundario dos veces, primero obtendrá el valor de la clave principal a través del índice secundario y luego consultará el índice principal nuevamente, lo que será un poco más engorroso.