[Optimización de base de datos-Índice] Explicación detallada de los tipos de índice MySQL

El tipo de índice está relacionado con el motor de almacenamiento y los tipos de índice admitidos por cada motor de almacenamiento no son necesariamente exactamente los mismos. Los índices MySQL se pueden clasificar desde un método de almacenamiento, una perspectiva lógica y una perspectiva de uso práctico.

Distinción del método de almacenamiento

Según los diferentes métodos de almacenamiento, los índices comúnmente utilizados en MySQL se dividen físicamente en dos categorías: índices de árbol B e índices HASH. Cada uno de los dos tipos diferentes de índices tiene su propio ámbito de aplicación diferente.

1) índice del árbol B

El índice de árbol B también se denomina índice BTREE. Actualmente, la mayoría de los índices se almacenan utilizando el índice de árbol B.

El índice de árbol B es una estructura de datos típica que contiene principalmente los siguientes componentes:

  • Nodo hoja: contiene entradas que apuntan directamente a filas de datos de la tabla. Los nodos hoja están conectados entre sí y un nodo hoja tiene un puntero al siguiente nodo hoja.
  • Nodo de rama: contiene entradas que apuntan a otros nodos de rama o nodos de hoja en el índice.
  • Nodo raíz: un índice de árbol B tiene solo un nodo raíz, que en realidad es el nodo de rama en la parte superior del árbol.

Según esta estructura de datos de árbol, cada fila de la tabla tendrá un valor correspondiente en el índice. Por lo tanto, al realizar una consulta de datos en la tabla, la fila donde se encuentran los datos se puede ubicar paso a paso según el valor del índice.
El índice de árbol B puede realizar consultas de valor clave completo, rango de valor clave y prefijo de valor clave, y también puede ordenar los resultados de la consulta por ORDER BY. Sin embargo, los índices del árbol B deben seguir el principio del prefijo de la izquierda y se deben considerar las siguientes restricciones:

  • La consulta debe comenzar desde la columna más a la izquierda del índice.
  • La consulta no puede omitir una columna de índice y debe coincidir de izquierda a derecha.
  • El motor de almacenamiento no puede utilizar columnas a la derecha de la condición de rango en el índice.

2) índice hash

Hash generalmente se traduce como "hash" y también se transcribe directamente como "hash", que consiste en transformar una entrada de cualquier longitud (también llamada pre-mapeo, pre-imagen) en una salida de longitud fija mediante un algoritmo hash. , la salida es el valor hash.
Un índice hash también se denomina índice hash o índice HASH. MySQL actualmente solo admite el motor de almacenamiento MEMORY y el motor de almacenamiento HEAP para admitir este tipo de índice. Entre ellos, el motor de almacenamiento MEMORY puede admitir el índice de árbol B y el índice HASH, y utiliza HASH como índice predeterminado.
El índice HASH no busca datos basándose en una estructura de datos en forma de árbol, sino que obtiene las filas de registros de la tabla en función del valor hash correspondiente a la columna del índice. La característica más importante del índice hash es el acceso rápido, pero también tiene las siguientes deficiencias:

  • MySQL necesita leer el valor de la columna de índice en la tabla para participar en el cálculo hash, que es una operación que requiere mucho tiempo. En otras palabras, en comparación con los índices de árbol B, crear índices hash llevará más tiempo.
  • No se puede utilizar la clasificación del índice HASH.
  • El índice HASH solo admite comparación de igualdad, como "=", "IN()" o "<=>".
  • Los índices HASH no admiten la coincidencia parcial de claves porque el valor HASH se calcula a través del valor completo del índice.

Distinción lógica

Según el propósito específico del índice, los índices en MySQL se dividen lógicamente en las siguientes cinco categorías:

1) índice ordinario

El índice ordinario es el tipo de índice más básico en MySQL, no tiene restricciones y su única tarea es acelerar el acceso del sistema a los datos.
Un índice normal permite insertar valores duplicados y valores nulos en la columna en la que está definido el índice.
Al crear un índice normal, las palabras clave que se suelen utilizar son INDEX o KEY.

A continuación, cree un índice denominado index_id en el campo id de la tabla tb_student.

CREATE INDEX index_id ON tb_student(id);

2) índice único

Un índice único es similar a un índice normal, la diferencia es que el propósito de crear un índice único no es aumentar la velocidad de acceso, sino evitar la duplicación de datos.
El valor de una columna de índice única debe ser único y se permiten valores nulos. En el caso de un índice compuesto, la combinación de valores de columna debe ser única.
La creación de un índice único suele utilizar la palabra clave UNIQUE.

A continuación, cree un índice llamado index_id en el campo id de la tabla tb_student. La declaración SQL es la siguiente:

CREATE UNIQUE INDEX index_id ON tb_student(id);

Entre ellos, el campo de identificación puede tener o no restricciones únicas.

3) Índice de clave primaria

Como sugiere el nombre, un índice de clave principal es un índice creado específicamente para el campo de clave principal y también es un tipo de índice.

El índice de clave principal es un índice único especial que no permite valores duplicados o valores vacíos.

La creación de un índice de clave principal generalmente utiliza la palabra clave PRIMARY KEY. No puede utilizar la instrucción CREATE INDEX para crear un índice de clave principal.

4) índice espacial

Un índice espacial es un índice creado sobre un campo de tipo de datos espaciales, ampliado utilizando la palabra clave SPATIAL.
Las columnas utilizadas para crear índices espaciales deben declararse NOT NULL. Los índices espaciales solo se pueden crear en tablas cuyo motor de almacenamiento sea MyISAM.
Los índices espaciales se utilizan principalmente para tipos de datos geoespaciales GEOMETRÍA. Para los principiantes, este tipo de índice rara vez se utiliza.

A continuación, cree un índice llamado index_line en el campo de línea en la tabla tb_student. La declaración SQL es la siguiente:

CREATE SPATIAL INDEX index_line ON tb_student(line);

Entre ellos, el motor de almacenamiento de la tabla tb_student debe ser MyISAM y el campo de línea debe ser un tipo de datos espaciales y no nulo.

5) Índice de texto completo

Los índices de texto completo se utilizan principalmente para buscar palabras clave en el texto y solo se pueden crear en columnas de tipo CHAR, VARCHAR o TEXT. En MySQL, sólo el motor de almacenamiento MyISAM admite la indexación de texto completo.
Los índices de texto completo permiten insertar valores duplicados y valores nulos en columnas indexadas.
Sin embargo, para tablas de datos de gran capacidad, generar índices de texto completo consume tiempo y espacio en el disco duro.
Cree un índice de texto completo utilizando la palabra clave FULLTEXT.

Cree un índice de texto completo llamado index_info en el campo de información de la tabla tb_student. La declaración SQL es la siguiente:

CREATE FULLTEXT INDEX index_info ON tb_student(info);

Entre ellos, el motor de almacenamiento de index_info debe ser MyISAM y el campo de información debe ser de tipos como CHAR, VARCHAR y TEXT.

Distinción de uso real

Los índices se dividen lógicamente en las cinco categorías anteriores, pero en el uso real, los índices generalmente se crean en índices de una sola columna e índices combinados.

1) Índice de una sola columna

Un índice de una sola columna significa que el índice solo contiene una columna de la tabla original. Cree un índice en un solo campo de la tabla y un índice de una sola columna indexará solo en ese campo.
Un índice de una sola columna puede ser un índice normal, un índice único o un índice de texto completo. Solo asegúrese de que el índice solo corresponda a un campo.

A continuación, cree un índice de una sola columna llamado index_addr en el campo de dirección de la tabla tb_student. El tipo de datos del campo de dirección es VARCHAR (20) y el tipo de datos del índice es CHAR (4). La declaración SQL es la siguiente:

CREATE INDEX index_addr ON tb_student(address(4));

De esta manera, al realizar una consulta, solo puede consultar los primeros 4 caracteres del campo de dirección en lugar de toda la consulta.

2) Índice de varias columnas

Un índice combinado también se denomina índice compuesto o índice de varias columnas. En comparación con los índices de una sola columna, los índices compuestos combinan varias columnas de la tabla original para formar un índice. Un índice de varias columnas crea un índice en varios campos de la tabla. El índice apunta a varios campos correspondientes a la creación y se puede consultar a través de estos campos. Sin embargo, el índice sólo se utilizará si el primero de estos campos se utiliza en la condición de consulta.

Por ejemplo, si crea un índice de varias columnas en los campos de identificación, nombre y sexo de la tabla, el índice se usará solo cuando la condición de consulta use el campo de identificación.

A continuación, cree un índice llamado index_na en los campos de nombre y dirección en la tabla tb_student. La declaración SQL es la siguiente:

CREATE INDEX index_na ON tb_student(name,address);

Una vez creado el índice, el campo de nombre debe incluirse en las condiciones de consulta para utilizar el índice.

Consejo: una tabla puede tener varios índices de una sola columna, pero estos índices no son índices compuestos. Un índice compuesto esencialmente proporciona múltiples índices para consultas en una tabla para acelerar las consultas. Por ejemplo, se crea un índice combinado (c1, c2, c3) en una tabla. En consultas reales, el sistema utiliza tres índices para acelerar: índice único (c1), índice de doble columna (c1, c2) y índices múltiples. Índice de columna (c1, c2, c3).

Supongo que te gusta

Origin blog.csdn.net/qq_25285531/article/details/131299475
Recomendado
Clasificación