前言
索引对于良好性能十分关键,尤其是表中的数据量越来越大的时候,索引对于查询性能的影响相当关键,数据量小的时候影响还不是很明显,所以理解索引,对于开发人员来说十分关键
1.什么是索引
索引(键'key')是存储引擎用于快速查找记录的数据结构
-
他是作用于存储引擎层的,和server层无关
-
他的目的是为了提高查询速度
-
他的本质是数据结构(哈希,B+tree等)
2.索引的优缺点
-
优点
-
所有字段都可以建立索引
-
大大加快了数据的查询速度,减少了服务器需要扫描的数据量
-
将随机IO转换成顺序IO
-
帮助服务器避免排序和生成临时表
-
-
缺点
-
创建索引和维护索引要消耗额外的时间,并且随着数据量的增加,消耗时间会加长,还会涉及oneline ddl(以后会讲)问题
-
索引也占用存储空间,大量的索引会占用可能比数据文件更多的存储空间
-
索引需要动态维护,对表进行增删改的时候,会降低数据的维护
-
3.索引分类
3.1按照数据结构分:有序数组,哈希表,B树,B+树,R树,FullText全文索引,GIS地理位置索引等
3.2按照功能来分:聚簇索引,二级索引/辅助索引(单列索引,唯一索引,联合索引)
4.索引操作
4.1创建索引
单列索引
alter table 表名 add index/key 索引名(字段名);
alter table temp_100w add index inx_id (id);
联合索引
alter table 表名 add index/key 索引名(字段名1,字段名2);
alter table temp_100w add index inx_test(id,name);
注意事项:
因为创建索引,也是修改表结构,会触发DML写锁,所以也会引发在线DLL的问题,所以尽量避免在业务繁忙期间进行操作
4.2 查看索引
desc temp_100w;
+-------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+-------------------+-------+
| id | int(11) | NO | MUL | 0 | |
| name | varchar(100) | NO | | 未知 | |
| age | tinyint(10) | NO | | 99 | |
| sex | int(11) | NO | | 0 | |
| create_time | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------------+--------------+------+-----+-------------------+-------+
# key 这一行代表索引
4.3索引种类
-
-
PRI 主键索引
-
MUL 辅助索引
-
UNI 唯一索引
-
5.聚簇索引和辅助索引
来源:CSDN
作者:代码小学生王木木
链接:https://blog.csdn.net/qq_34481955/article/details/103794745