MySQL进阶篇(02):索引体系划分,b -树结构说明

  

本文源码:   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:表示查询的类型,主要是用于区别普通查询,联合查询,子查询等的复杂查询;
  <前>   <代码>简单:简单选择查询,查询中不包含子查询或者   主:查询中若包含复杂的子部分,最外层查询则被标记为初选   子查询:选择或在中包含子查询   :来自中包含的子查询被标记为派生衍生,mysql会递归执行这些子查询,且生成临时表   联盟:第二个选择出现在联盟后,标记为联盟   union-result:从工会表获取结果的选择   

MySQL进阶篇(02):索引体系划分,b -树结构说明