2010-03-02 19 views
10

Cuando creo un índice para una tabla en mysql, veo que index_type es tipo BTREE. Ahora bien, aunque entiendo sobre btree (s), no entiendo silenciosamente cómo almacena el índice y cómo la base de datos busca en los registros en función de esto.cómo funciona la indexación de B-tree en mysql

quiero decir, árbolB es excelente para las bases de datos para realizar leer y escribe grandes bloques de datos, cuando creamos un índice de tipo de columna de Primary key, lo que entiendo es, se crea un árbol y dividir los valores de la raíz basado en el tipo de valor de la raíz.

Ahora, ¿almacena solo la clave principal ID debajo de los árboles o toda la información asociada con esa clave principal?

Después de encontrar la identificación primaria deseada, ¿cómo extrae la base de datos la grabación?

Respuesta

20

La base de datos almacena el valor indexado como una clave B-Tree y el puntero de registro como un valor B-Tree.

Siempre que busque un registro que contenga un cierto valor de una columna indexada, el motor ubica la clave que contiene este valor en el B-Tree, recupera el puntero del registro y recupera el registro.

Lo que es exactamente un "puntero de registro", depende del motor de almacenamiento.

  • En MyISAM, el puntero de registro es un desplazamiento al registro en el archivo MYI.

  • En InnoDB, el puntero de registro es el valor PRIMARY KEY.

En InnoDB, la propia tabla es una B-Tree con un PRIMARY KEY como clave B-Tree. Esto es lo que se llama un "índice agrupado" o "tabla organizada por índice". En este caso, todos los demás campos se almacenan como un valor B-Tree.

En MyISAM, los registros se almacenan sin ningún orden especial. Esto se llama "almacenamiento en montón".

+0

Gracias por la explicación. En mi base de datos tengo algunas tablas con MyISAM y algunas como InnoDB con índices sobre ellas. ¿Esto afectará de todos modos las uniones y consultas que escribo son ambos tipos diferentes? – JPro

+1

@JPro: la base de datos maneja los detalles de indexación subyacentes automáticamente. La sintaxis 'JOIN' es la misma para las tablas' MyISAM' y 'InnoDB'. – Quassnoi

+0

lo que quiero decir es, ¿Importa en absoluto crear todas las tablas con el mismo motor de almacenamiento o no? – JPro