本文源码: GitHub·点这里| | GitEE·点这里
1,基本概念
首先要明确索引是什么:索引是一种数据结构,数据结构是计算机存储,组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合,例如:链表,堆栈,队列,二叉树等等。
其次要清楚索引的作用:索引可以使存储引擎快速找到数据记录,这是最基本的作用,索引是对查询速度最关键的影响,良好的索引设计可以使查询的效率有质的飞越。
索引的使用:如果查询语句使用所有,MySQL会在索引的数据结构上查询,如果查询到,就返回包含该索引的数据行。
3、索引分类
索引的种类非常多,如何分类取决多个场景和不同的角度,常见的划分如下:
-
<李>产生作用:主键索引,普通索引,非空索引,全文索引;李>
<李>覆盖字段:单列索引,组合索引;李>
<李>数据结构:b - tree索引,哈希索引,r - tree索引;李>
<强>注意强>:索引的实现是在存储引擎层面,相同的索引在不同的存储引擎中,其实现方式可能都是不一样的。
1、不同索引特点
<>强普通索引强>
基本的索引,没有任何使用限制,主要用来加速数据查询。适合经常出现在查询条件或排序条件中的数据列。
<强>主键索引强>
特殊的唯一索引,不允许有空值,在建表的时候指定主键,就会创建主键索引,MySQL中最核心的索引,大量的业务数据都是基于主键查询。
<强>唯一索引强>
普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须是唯一性的。
<强>全文索引强>
用于全文搜索,通过建立全文索引,基于分词的查询模式,可以极大的提升检索效率。
<强>组合索引强>
创建的索引覆盖两个或者两个以上的列,适应组合查询的场景,也常用于要素验证的业务,例如判断用户身份标识、手机号,邮箱,是否为同一个用户。
创建表user_base ( id INT (11) NOT NULL AUTO_INCREMENT评论的主键id”, user_name VARCHAR (20) NOT NULL评论的用户名”, 电话VARCHAR (20) NOT NULL评论的手机号”, 电子邮件VARCHAR(32)默认空评论“邮箱”, card_id VARCHAR(32)默认空评论的身份编的号, create_time datetime默认空评论“创建时间”, 州INT(1)违约' 1 '评论“是否可用,0 -不可用,1 -可用的, 主键(“id”) )引擎=INNODB默认字符集=utf8评论='用户基础表”; 代码>
<>强创建单列索引强>
<前> <代码类=" lang-sql ">创建索引card_id_index> ALTER TABLE user_base添加索引state_index(状态); 代码><>强创建组合索引强>
<前> <代码类=" lang-sql ">创建索引bind_index>删除索引card_id_index> 3、查询索引分析MySQL查询,多数情况下用来分析执行语句的SQL中是否使用索引,是否产生临时表等性能相关问题。
<>强基础用法强>
<前> <代码类=" lang-sql ">解释SELECT * FROM user_base id=' 1 '; 代码><强>参数说明强>
-
<李> id:相同,按表列由上至下顺序执行,不同,如果是子查询,id的序号会递增,id的值越大优先级越高,越先被执行;李>
<李> select_type:表示查询的类型,主要是用于区别普通查询,联合查询,子查询等的复杂查询;李>