Índice Superior de MySQL

avanzada Mysql

1. Índice

1.1 Visión general Índice

Mysql definición oficial del índice es: índice (index) es ayudar a MySQL de manera eficiente obtener la estructura de datos de los datos (ordenó). Además de los datos, el sistema de base de datos también mantiene estructuras de datos satisfacen un algoritmo particular de búsqueda, las estructuras de datos y algunos de referencia (punto a) de datos, y se muestra datos de índice a continuación:

Aquí Insertar imagen Descripción

tabla de la izquierda es una tabla de datos, un total de dos de siete registros, a la izquierda es la dirección física del registro de datos (adyacente a la atención lógicamente grabada en el disco tampoco son necesariamente físicamente adyacentes). Con el fin de acelerar Encuentra Col2, que puede el mantenimiento de un derecho se muestra el árbol de búsqueda binaria , cada nodo contiene valores de índice, respectivamente, y un puntero a la dirección física correspondiente a los datos registrados, por lo que puede utilizar el árbol binario para encontrar datos de respuesta adquiridos rápidamente.

En general, el índice en sí es también un gran general, no todos los almacenados en la memoria, por lo que el índice se encuentra a menudo en forma de archivos de índice se almacenan en el disco. El índice es las herramientas más utilizadas para mejorar el rendimiento de base de datos.

1.2 Ventajas y desventajas de índice

ventajas:

1) similar a los libros de índice de directorio, mejorar la eficiencia de datos de recuperación, reducir el coste de la base de datos IO

  1. Por índice de la columna para ordenar los datos, reducir el costo de la ordenación de datos, reducir el consumo de CPU

desventajas:

1) que es en realidad una tabla de índice, que se almacena el campo de índice de clave principal, y clase de entidad de grabación de punto, así que la columna de índice es un espacio.

2) A pesar de que el índice de mejorar en gran medida la consulta de eficiencia, sino también a reducir la velocidad de actualización de la tabla, como la inserción de la mesa, UPDATE, DELETE. Por lo tanto, cuando se actualiza la tabla, MySQL no sólo para guardar los datos, sino también ahorrar sobre el archivo de índice agregado con cada actualización índice campos de la columna, y se ajustará porque la información del índice después de que el cambio de clave con el nuevo trae.

1.3 Estructura Índice

El índice se implementa en motor de almacenamiento MySQL, no se han aplicado en la capa de servidor. Por lo tanto, cada índice motor de almacenamiento no son necesariamente idénticos, no todos los motores de almacenamiento soportan todos los tipos de índices. MySQL ofrece actualmente los 4 índices siguientes:

  • Índice BTREE: El tipo más común de índice, el índice más compatible con el número de índice B.

  • índice hash: Sólo soporte de motor de la memoria, el uso de escenarios simples

  • índice de árbol R (índice espacial): el índice es un tipo de índice MyISAM motor en particular espacial, principalmente para los tipos de datos geoespaciales, por lo general menos

  • Texto completo (indización de texto completo): un índice de texto es un tipo de índice MyISAM especial, sobre todo para la indización de texto completo, InnoDB de la versión Mysql5.6 comenzó a apoyar la indización de texto.

    MyISAM, InnoDB, memoria soporte de motor de tres de almacenamiento de varios tipos de índices

índice motor InnoDB motor MyISAM motor de la memoria
Índice BTREE apoyo apoyo apoyo
índice hash No es compatible No es compatible apoyo
índice de árbol R No es compatible apoyo No es compatible
Texto completo Versión 5.6 soporta los siguientes apoyo No es compatible

Solemos decir el índice, si no se especifica, se valor de B + árbol (árbol de búsqueda múltiples, no necesariamente un binario) estructura de índice de la organización que índice agrupado, un índice compuesto, un índice de prefijo, el único índice son por defecto se utiliza B + índice de árbol árbol, conocido como el índice.

estructura 1.3.1BTREE

BTree árbol equilibrado conocido como multiplexación, M tenedor características generales BTree son como sigue:

  • Cada nodo en el árbol contiene un niño m
  • Además de los nodos nodo raíz y las hojas, cada nodo tiene al menos [ceil (/ 2 m)] niños.
  • Si la raíz no es un nodo hoja, entonces hay al menos dos niños
  • Todos los nodos hoja tienen el mismo nivel de nuevo.
  • Cada no hoja clave de nodo por n y n + 1 de los punteros, donde [ceil (m / 2)] <= n <= m-1

BTree tenedor 5, por ejemplo, el número de clave: Fórmula Derivación [ceil (m / 2) -1] <= n <= m-1 de manera que 2 <= n <= 4. Cuando n> 4, la división nodo intermedio. al nodo padre, los nodos en ambos lados de división.

Insertar datos, por ejemplo CNGAHEKQMFWLTZDPRXYS

La evolución es como sigue:

1) se inserta en las cuatro primeras letras CNGA (cuadrados vacíos debajo del puntero)

Aquí Insertar imagen Descripción

  1. Insertar H, n> 4, un elemento intermedio divide las letras G para el nuevo nodo

Aquí Insertar imagen Descripción

3) Insertar E, K, Q no requiere dividida

Aquí Insertar imagen Descripción

4) M se inserta, las letras M elemento intermedio se separaron para el nodo padre G
Aquí Insertar imagen Descripción

5) Insertar M, W, L, T no es necesario dividir

Aquí Insertar imagen Descripción

6) insertar Z, T elemento intermedio divide en el nodo padre
Aquí Insertar imagen Descripción

7) se inserta D, el elemento intermedio divide en el nodo D se inserta entonces en el P, R, X, Y no necesidad parte

Aquí Insertar imagen Descripción

8) insertado última S, NPQR nodo n> 5, Q divide el nodo intermedio, pero el nodo padre de la escisión DGMT el n> 5, la división hasta el nodo M intermedio

Aquí Insertar imagen Descripción

Este, el árbol BTREE para construir un completo, árboles y BTree comparación binaria, consulta de datos más eficiente, ya que para los mismos datos, la estructura jerárquica BTREE más pequeño que el árbol binario, por lo que la velocidad de búsqueda rápida.

estructura 1.3.2 B + ÁRBOL

B + árbol es una variante de BTREE, B + Árbol y la diferencia BTree es:

1) n tenedor B + Árbol tiene hasta n clave, y BTree un máximo de n-1 llave.

2) nodo hoja B + Árbol mantiene toda la información clave, disposición de las teclas según el tamaño.

3) Todos los nodos que no son hojas pueden ser vistos como una parte clave del índice.

Aquí Insertar imagen Descripción

Como la única información clave Guardar nodos hoja del árbol B +, las investigaciones han venido de las hojas de cualquier clave raíz. ruta de consulta de modo B + Árbol es más estable.

1.3.3 Mysql B + Árbol

estructura de datos de índice Mysql de la clásica B + Árbol está optimizado. B + Árbol del original en base a un aumento de un puntos lista puntero a un nodo de hoja adyacente, se forma con una B + Árbol de punteros lógica secuencial, para mejorar intervalo de acceso el rendimiento.

MySQL es un diagrama estructural esquemático índice B + Árbol

Aquí Insertar imagen Descripción

1.4 Índice de Clasificación

1) índice de valor único: el índice contiene sólo una única columna, una tabla puede tener múltiples índice separado.

2 índice único): el valor de índice de la columna debe ser único, pero permitir que un valor nulo

3) índice compuesto: el índice comprende una pluralidad de columnas

1.5 Índice de sintaxis

En la creación de la tabla de índices se pueden crear al mismo tiempo, también se puede añadir un nuevo índice en cualquier momento.

Preparación del entorno

create database demo_01 default charset=utf8mb4;

use demo_01

CREATE TABLE city(
	city_id int(11) NOT NULL AUTO_INCREMENT,
    city_name varchar(50) NOT NULL,
    country_id int(11) NOT NULL,
    PRIMARY KEY(city_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE country(
	country_id int(11) NOT NULL AUTO_INCREMENT,
    country_name varchar(100) NOT NULL,
    PRIMARY KEY(country_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into city(city_id,city_name,country_id) values(1,'西安',1);
insert into city(city_id,city_name,country_id) values(2,'NewYork',2);
insert into city(city_id,city_name,country_id) values(3,'北京',1);
insert into city(city_id,city_name,country_id) values(4,'上海',1);

insert into country(country_id,country_name) values(1,'China');
insert into country(country_id,country_name) values(2,'America');
insert into country(country_id,country_name) values(3,'Japan');
insert into country(country_id,country_name) values(4,'UK');

1.5.1 Creación de un índice

sintaxis:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tb1_name(index_col_name,...)

index_col_name : column_name[(length)][ASC | DESC]

Ejemplo: Crear un índice para el campo de la tabla de la ciudad city_name;

create index idx_city_name on city(city_name);

Podemos ver el cambio en el índice de la tabla es la siguiente :( Nota como: El valor por defecto viene con un índice de clave principal)

Aquí Insertar imagen Descripción

1.5.2 Ver índice

sintaxis:

show index from table_name;

tabla de la vista del índice de la ciudad

show index from city;

Aquí Insertar imagen Descripción

1.5.3 Eliminar índice

sintaxis:

DROP INDEX index_name ON tb1_name;

Ejemplo: Así idx_city_name sobre la mesa a la ciudad de eliminación

DROP INDEX idx_city_name on city;

En las investigaciones sobre el índice:

Aquí Insertar imagen Descripción

Se encontró que el índice ha sido borrado

comando 1.5.4ALTER

1) alter table tb_name add primary key(colum_list);
   该语句添加一个主键,这意味着索引值必须是唯一的,且不能为null
2) alter table tb_name add unique index_name(column_list);
   这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
3) alter table tb_name add index index_name(column_list);
   添加普通索引,索引可能出现多次.
4) alter table tb_name add fulltext index_name(column_list);
   该语句指定了FULLTEXT,用于全文索引

1.6 diseño de índices principios

El índice ha sido diseñado para seguir algunos principios, trate de considerar al crear un índice en línea con estos principios, fácil y práctica para mejorar el índice de eficiencia, más eficiente y el índice de práctica.

  • Alta frecuencia de consultas, y gran cantidad de indexación de la tabla de datos.
  • Seleccione el campo de índice, la columna debe ser las mejores condiciones de extracción candidato de la cláusula where, si el combinado cláusula where más, se debe seleccionar el, el mejor grupo de filtro más utilizado y dichas columnas.
  • Use un índice único, cuanto mayor sea la discriminación, el uso más eficiente del índice.
  • Índice efectivamente puede mejorar la eficiencia de la consulta de datos, pero el índice no es el número cuanto más mejor, más el índice, los costos de mantenimiento de índices aumentar naturalmente. inserción de la mesa, actualización, etc., operaciones de borrado DML con más frecuencia, se introducirán los índices más altos costos de mantenimiento, lo que reduce la eficiencia de las operaciones de DML, aumentar el tiempo de operación que consume apropiada. También demasiado, entonces el índice, MySQL seleccione la enfermedad sueño culpable, aunque la final todavía encontrará un índice utilizable, pero sin duda aumentará el precio de la opción.
  • Utilizar un índice resumen, después de crear el índice mediante un disco duro para almacenar y por lo tanto mejorar el acceso de E / S índice de eficiencia, sino que también puede mejorar la eficiencia general de acceso. Si el campo de longitud total se compone de índice relativamente corta, los valores de índice se pueden almacenar de una manera más bloques de memoria de un tamaño dado, se puede mejorar efectivamente la correspondiente O acceso MySQL I / eficiencia.
  • Utilice la izquierda-prefix, una combinación de N columnas índice compuesto, a continuación, crear el equivalente de los índices de N, si la consulta cláusula WHERE de los primeros campos del índice, entonces este SQL de consultas puede utilizar el índice compuesto para mejorar la eficiencia de la consulta.
-- 创建复合索引:
CREATE INDEX idx_name_email_status on tb_name(Name,email,STATUS);

-- 就相当于
--		对name 创建索引;      
--		对name,email创建索引;
--		对name,email,status创建索引;
Publicado 69 artículos originales · ganado elogios 6 · vistas 2487

Supongo que te gusta

Origin blog.csdn.net/qq_40539437/article/details/104072234
Recomendado
Clasificación