mysql索引是什么?基础理论讲解
分享mysql数据库索引的基础理论知识讲解,数据库索引有什么作用?为什么在构建数据库的时候会用到mysql索引呢?是因为索引可以降低服务器资源消耗,加速数据查询效率,提高用户体验!
那么mysql数据库索引到底是什么?怎么创建数据库索引,删除索引,查看索引呢?雨泽将会给大家讲解,如果你对数据库索引不了解,可以继续往下阅读学习,希望可以帮到你。
一.索引分类:单列索引,唯一索引,复合索引
二.基本概念:索引是帮助mysql高效获取数据的数据结构。所以索引本质上就是一种数据结构,可以理解为排好序的快速查找的数据结构。
优势:可以高效检索数据,降低数据库的io和cpu消耗
劣势:更新表,还要更新索引,会降低更新表的速度
三.不适合建立索引的情况:
1,表数据太少
2,经常增删改的表
3,数据重复且分布平均的字段,比如性别
4,Where条件里用不到的字段
四.适合建立索引的情况:
1,频繁作为查询条件的字段
2,查询中与其他表关联的字段
3,查询中排序的字段,若排序的字段建有索引会大大提高排序速度
4,查询中统计或者分组的字段
五.索引使用:
创建
CREATE [UNIQUE] INDEX indexName ON tableName(字段名...);
ALTER TABLE tableName ADD [UNIQUE] INDEX indexName (字段名...);
删除
DROP INDEX indexName ON tableName;
查看
SHOW INDEX FROM tableName;
六:可以用explain 去分析查询语句
使用explain语句主要得出来的字段包括:
Id,查询标识
Select_type:select查询类型,主要区别于普通查询,联合查询,子查询等复杂查询。
Table:查询的那个表
Type:join类型,决定性能的指标,显示查询使用了哪种类型,最好到最差依次是:
system>const>eq_ref>ref>range>index>ALL
Const,只索引依次就找到了,用于primary key 或者unique索引
eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描
Ref 非唯一性索引扫描,返回匹配某个单独值的所有行
range:只检索给定范围的行,使用一个索引来选择行
Index:Full IndexScan,index与ALL区别为index类型只遍历索引树
All:Full Table Scan,将遍历全表以找到匹配的行
备注:一般来说,得保证查询至少达到range级别,最好能达到ref
Using filesort:说明mysql会对数据使用一个外部的索引排序,MySQL中无法利用索引完成的排序操作称为“文件排序”
Using where:表明使用了where过滤
Using Index :表示索引覆盖(Covering Index),不会回表查询("覆盖索引扫描",表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错)
Using temporary: 使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。
possible_keys: 此次查询中可能选用的索引显示可能应用在这张表中的索引,一个或多个。
key: 此次查询中确切使用到的索引
Key_len: 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
rows: 显示此查询一共扫描了多少行. 这个是一个估计值
extra: 包含不适合在其他列中显示但十分重要的额外信息
以上就是mysql数据库索引的基础理论详细介绍,希望可以帮到你,让你更好的了解mysql数据库索引的使用!
泽易云博客是一个专注编程技术开发以及手机副业赚钱项目的网站。
编辑:小编,文章部分内容整理网络!