MySQL 索引

MySQL 索引

什么是索引?

用来高效获取数据的数据结构。
查询:无索引时:全表查询;有索引时,高效。
MySQL 索引_第1张图片

索引结构

MySQL 索引_第2张图片
大部分存储引擎都支持B+树索引
红黑树在大数据量情况下,层级较深,检索速度慢。
B+树:1、所有元素出现在叶子节点;叶子节点形成单向链表

MySQL索引数据结构 – 在B+树的基础上,增加了一个指向相邻叶子节点的链表指针。带有顺序指针的B+Tree提高了区间访问的性能。

MySQL 索引_第3张图片

为什么使用B+树?
  • B+树,一个页中能够存放的key和指针更多,相同数据量下,层数更少
  • 搜索效率稳定
  • 便于范围搜索和排序
  • hash索引,不支持范围查询和排序
索引分类
  • 主键索引 :针对主键创建的索引
  • 唯一索引 : 避免数据列中的值重复,加了唯一约束的列字段创建唯一索引
  • 常规索引 --》 快速定位
  • 全文索引 --》 查找文本中的关键词
索引分类
  • 聚集索引 必须有,只有一个
    MySQL 索引_第4张图片
  • 二级索引 可以存在多个
索引语法

MySQL 索引_第5张图片

SQL性能分析
SQL执行频率

判断数据库增删改查的哪个为主:

SHOW GLOBAL STATUS LIKE 'Com_______';

MySQL 索引_第6张图片
优化查询为主的数据库

SQL执行频率
  • 慢查询日志定位执行效率比较低的sql
    MySQL 索引_第7张图片

查看慢查询是否开启:
MySQL 索引_第8张图片
查看慢查询日志:
MySQL 索引_第9张图片

  • 业务简单但查询时间稍长,也要优化。
profile详情

MySQL 索引_第10张图片

查看每一条sql指令的耗时,耗时在哪里
show profile
MySQL 索引_第11张图片

explain

查看sql语句的执行计划,是否用索引,表的连接,连接顺序
MySQL 索引_第12张图片
MySQL 索引_第13张图片

Type:最反映sql性能。
possible_key, key, key_len,rows,extra

索引使用
  • 最左前缀法则:如果使用了联合索引,要遵守最左前缀法则。查询从索引的最左列(最左列一定要存在,可以放在任意位置)开始,不能跳过索引中的列,如果跳过了某一列,后面的字段索引失效
  • 如果有(>,<)范围查询,则范围查询右侧的列索引失效。[范围查询字段仍生效] – >**建议使用 >= <= **
  • 在索引列上进行运算,索引将失效
  • 字符串类型的字段,如果不加’',索引会失效
  • 头部模糊查询,索引会失效
  • or分割开的条件,如果or前的条件中列有索引,而条件后的列中没有索引,那么,涉及的索引都不会被用到。
  • 如果MySQL评估,使用索引会慢于全表查询,则索引失效。

SQL提示

  • 在SQL语句中加入人为的提示来达到优化操作的目的

MySQL 索引_第14张图片

  • use -->告诉mysql
  • ignore ->忽略索引
  • force 强制
覆盖索引

在这里插入图片描述

前缀索引

用字符串的一部分前缀建立索引
MySQL 索引_第15张图片
在这里插入图片描述

前缀索引:通过前缀索引,回表查询拿到数据,与select语句对比,如果符合,则返回,继续查询下一个元素是否符合前缀,如果下一个元素找到的数据也符合,则组装数据。

解决大文本字段进行索引时,索引体积太大,浪费磁盘IO的问题

单例索引和联合索引

MySQL 索引_第16张图片

MySQL 索引_第17张图片
MySQL 索引_第18张图片

你可能感兴趣的:(java学习笔记,mysql,数据库)