Índice de búsqueda rápida de MySQL

Comprobación rápida de MySQL

Debido a que a menudo olvido algunas declaraciones, palabras clave, operaciones, etc. de MySQL en mi trabajo y estudio diario, recientemente me tomé un tiempo para escribir el siguiente contenido sobre MySQL. es como un diccionario


Restablecer contraseña de mysql Operadores
de tipo de datos Funciones comunes Integridad de datos Operaciones básicas de la base de datos Operaciones sobre la propia tabla Operaciones sobre datos de la tabla Subconsultas Conexiones de múltiples tablas Vistas en este artículo Preprocesamiento de sentencias SQL Funciones personalizadas y procedimientos almacenados Programación en MySQL













Introducción

Un índice es una estructura que ordena los valores de una o más columnas en una tabla de base de datos y permite un acceso rápido a información específica en una tabla de base de datos. Si desea encontrar un empleado específico por su apellido, un índice puede ayudarlo a obtener la información más rápido que buscar todas las filas de la tabla.
Uno de los propósitos principales del índice es acelerar la recuperación de datos en la tabla, es decir, una estructura de datos auxiliar que puede ayudar a los buscadores de información a encontrar ID de registros que cumplan condiciones restringidas lo más rápido posible.
Por ejemplo, esta consulta: seleccione * de la tabla1 donde id=10000. Si no hay índice se debe recorrer toda la tabla hasta encontrar la fila con ID igual a 10000; después de tener un índice (debe ser un índice establecido en la columna ID), se puede buscar en el índice. Dado que el índice está optimizado mediante un determinado algoritmo, el número de búsquedas es mucho menor. Se puede ver que el índice se utiliza para el posicionamiento.
Fuente: Enciclopedia Baidu

Los índices solo deben crearse en tablas con una gran cantidad de datos y muchas consultas en la tabla pero pocas actualizaciones; los índices deben crearse en tablas que a menudo requieren operaciones de clasificación, agrupación y unión.
Si es una tabla que necesita actualizar contenido con frecuencia (insertar, actualizar, eliminar), debe evitar el uso de índices; las tablas con muchos registros repetidos no deben crear índices.

Crear índice

crear índicecrear índice

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
    [USING {
   
   BTREE | HASH}]
    ON 表名 (列名 [(长度)] [ASC | DESC],...)

unique:唯一索引,指定unique索引的列的值必须是唯一的,允许空值。如果是组合索引则组合必须唯一。
fulltext:全文索引,制定fulltext索引的列支持值的全文查找,允许重复值和空值。
spatial:空间索引,对数据类型是MySQL支持的4种空间数据类型geometrypointlinestringpolygon的字段建立的索引。
普通索引:不指定上面的关键字的索引(只写create index)。是mysql中的基本索引,允许重复值和空值。
主键索引:使用关键字primary key的列会生成主键索引,不允许空值和重复值。

索引名:为创建的索引取的名字

using {
   
   btree | hash}:使用的索引类型,不写默认是btree

列名[(长度)]:指定对那个列(字段)生成索引;后面可选的长度是指定使用该字段中值前n(长度)个字符当作索引,不写则使用字段值的全部字符。
一般来说,指定长度是为了让生成的索引文件占用空间更小。
指定长度的话会比使用全字符的索引速度慢一些。
如果列中前n(长度)个字符是不同的,则这种指定长度的索引比使用全部字符的索引速度不会差别太大。

[asc | desc]:升序还是降序


# 举例
# 给user表的name字段创建一个普通索引
create index name_index on user (name);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

alterar tabla crea índice

alter table 表名
add [unique | ...] index [索引名](列名[(长度)] [{
   
   asc | desc}],...);

# 为commodity表中的name字段创建一个降序的普通索引
alter table commodity
add index (name(10) desc);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Especificar el índice al crear la tabla.

# 创建一个test_table表,并为id字段创建主键索引,
# 为tel字段创建唯一索引
# 为height,weight字段创建组合普通索引
create table test_table(
id int,
name char(10),
tel char(11),
height int,
weight int,
primary key (id),
unique index (tel),
index (height,weight)
);
Query OK, 0 rows affected (0.02 sec)

Ver índice

show index from 表名;

# 查看表test_table的索引
show index from test_table;
表名			  是否不是唯一值  索引名      索引中的序列号   列(字段)名 列在索引中的存储方式  索引在唯一    。。。。                      索引类型  。。。。
																A:升序 NULL:无分类  值的数据的
																					估值
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| test_table |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| test_table |          0 | tel      |            1 | tel         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| test_table |          1 | height   |            1 | height      | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| test_table |          1 | height   |            2 | weight      | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
4 rows in set (0.00 sec)

Eliminar índice

# 方法一
drop index 索引名 on 表名;

# 方法二
alter table 表名 drop index 索引名;

Más

crear índice

Supongo que te gusta

Origin blog.csdn.net/weixin_45345384/article/details/117134271
Recomendado
Clasificación