English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En MySQL, los índices se pueden dividir en dos tipos: índice de hash y índice de B-tree.
En qué circunstancias se puede usar el índice de B-tree?
1.Índice de coincidencia completa
Por ejemplo:
orderID="123"
2.Coincidencia de búsqueda de prefijo más a la izquierda del índice
Por ejemplo: crear un índice compuesto en los campos userid y date.
Entonces, si se ingresa userId como condición, este userid puede usar el índice, si se ingresa directamente date como condición, no se puede usar el índice.
3.Coincidencia de búsqueda de prefijo de columna
Por ejemplo: order_sn como ‘134%
4.Coincidencia de búsqueda de valor de rango
createTime>'2015-01-09' and createTime<'2015-01-10'
5.Coincidencia exacta del primer campo izquierdo y coincidencia de rango del otro campo
Por ejemplo:
userId=1 and createTime>'2016-9-18'
6.Las consultas que solo acceden al índice, llamadas índices de cobertura, y los datos de las columnas de consulta están incluidos en el índice.
Límites del índice BTREE
1.Si no se comienza a buscar según la columna más a la izquierda del índice, no se puede usar el índice.
Por ejemplo, crear un índice compuesto:
El campo orderId y createTime crean un índice compuesto, si solo se ingresa el condicional createTime sin el condicional orderId, no se puede usar este índice.
2.No se puede omitir la columna del índice al usar el índice.
Tres columnas:
Fecha, nombre, teléfono, composición de columnas e índices, si solo se ingresa fecha y teléfono al consultar, solo se puede usar fecha como índice para filtrar.
3.Las operaciones NOT IN y <> no pueden usar el índice.
4.Si la consulta incluye una búsqueda de rango en alguna columna, todas las columnas a la derecha no pueden usar el índice.
Características del índice de hash
El índice de hash se implementa basado en la tabla de hash, solo se puede usar el índice de hash cuando las condiciones de consulta coinciden exactamente con todas las columnas del índice de hash. Solo se puede usar consulta de igualdad.
Para todas las columnas del índice de hash, el motor de almacenamiento calculará un código de hash para cada fila, y el índice de hash almacenado es el código de hash.
Límites:
1.Debe leer dos veces, primero leer hash para encontrar la fila correspondiente, y luego leer los datos de la fila correspondiente.
2.El índice de hash no se puede usar para ordenar.
3.Solo admite búsqueda exacta, no admite búsqueda de índice parcial ni búsqueda de rango.
Colisión de hash:
Los índices hash no se pueden usar en campos con baja selectividad, mientras que se deben usar en columnas con alta selectividad, como crear índices hash en columnas con alta selectividad.
Por ejemplo: no cree un índice hash en el campo de género.
¿Por qué usar índices?
1Los índices reducen significativamente la cantidad de datos que necesita escanear el motor de almacenamiento. Los índices son más pequeños que el tamaño de los datos.
2Los índices pueden ayudarnos a ordenar para evitar el uso de tablas temporales. Los índices tienen un orden.
3Los índices pueden convertir I aleatorio/0 se convierte en IO ordenado
¿Es mejor tener más índices?
1Los índices aumentan el costo de las operaciones de escritura.
2Demasiados índices aumentan el tiempo de optimización de consultas y la selección.
Estrategia de creación de índices
1No se pueden usar expresiones o funciones en la columna de índice.
Por ejemplo: select * from product where to_days(out_date) –to_days(current_date)<=30, out_date es la columna de índice.
Cambiar a:
select* from product where out_date<date_add(current_date,interval 30 día)
2El tamaño del índice no puede superar un valor determinado.
El tamaño de la columna de índice inodb es 200 de longitud.
3La elección de prefijos y la selectividad de las columnas de índice.
create index idx_NAME on table (account);
4Índice compuesto.
Cómo elegir el orden de las columnas de índice.
1Las columnas que se indexan con frecuencia.
2Dada la alta selectividad de las columnas.
3Cree índices para columnas pequeñas.
Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume responsabilidad por las responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)