从“找”到B+树

  1. 索引是用来查找的。
  2. 折半查找是一种很优秀的方式。适合于 范围查找,固有缺点就是需要元素是有序的。二叉搜索树就是对折半查找的一种基础的实现。
  3. 但二叉搜索树当遇到特殊数据的时候,会出现“偏坠”,影响性能。所以就出现了平衡二叉树,来保证在各种情况下,折半查找的效率稳定。
  4. 平衡二叉树还有问题,那就是当大量数据时树高会迅速增高,需要多次切换树节点,所以并不适合外存,所以就出现了树高低,树节点信息多的多叉树-B树。

B+树

如何使用B+树查找数据

每一个索引都是一棵B+树

当索引中包含多个字段时,一个记录块中包含多个字段。第一个字段相同时,按照第二个字段排序,以此类推。

这种情况下,怎么使用索引?(最左前缀原则)

同理当字段为字符串时,可以将字符串看成一个记录块中包含多个字符。这种情况下怎么使用索引?(前缀索引)

Page结构

聚簇索引

主键索引上 有行

辅助索引上有 该索引值和主键  所以找到该索引位置后还要通过主键值到主索引中查找

索引覆盖现象

辅助索引上的值就够了 不用在到聚簇索引上找了

那样是否可以在辅助索引上将所有要用到的字段都加上来呢?

常见规则解释

1、索引的数量要控制:

(1) 单张表中索引数量不超过5个

(2) 单个索引中的字段数不超过5个

(3) 对字符串使⽤用前缀索引

(4) 建议优先考虑前缀索引,必要时可添加伪列并建立索引

2、主键准则

(1) 表必须有主键

(2) 不使用更新频繁的列作为主键

(3) 尽量不选择字符串列作为主键

(4) 不允许UUID MD5 HASH这些作为主键

(5) 默认使⽤非空的唯一键作为主键

(6) 建议选择自增

3、重要的SQL必须被索引,比如:

(1) UPDATE、DELETE语句的WHERE条件列

(2) ORDER BY、GROUP BY、DISTINCT的字段

4、多表JOIN的字段注意以下:

(1) 区分度最大的字段放在前面

(2) 核⼼SQL优先考虑覆盖索引

(3) 避免冗余和重复索引

(4) 索引要综合评估数据密度和分布以及考虑查询和更新比例

5、索引禁忌

(1) 不在低基数列上建立索引,例如“性别”

(2) 不在索引列进行数学运算和函数运算

6、尽量不使用外键

(1) 外键用来保护参照完整性,可在业务端实现

(2) 对父表和子表的操作会相互影响,降低可用性

7、索引命名:

非唯一索引必须以 idx_字段1_字段2命名,唯一所以必须以uniq_字段1_字段2命名,索引名称必须全部小写

8、新建的唯一索引必须不能和主键重复

9、索引字段的默认值不能为NULL,要改为其他的default或者空。NULL非常影响索引的查询效率

10、反复查看与表相关的SQL,符合最左前缀的特点建立索引。多条字段重复的语句,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量

11、能使用唯一索引就要使用唯一索引,提高查询效率

12、使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,Using Temporary

13、 SQL变更需要确认索引是否需要变更并通知DBA

MySql索引简介的更多相关文章

  1. Mysql 索引 简介

    Mysql索引 索引的分类 索引的创建 索引的注意事项 什么是索引 索引是存储引擎用于快速查找记录的一种数据结构. 索引由数据库中一列或者多列组成,作用是提高表的查询速度. 索引的优点,提高检索数据的 ...

  2. MySQL索引简介(转)

    一.为什么用索引例:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要写的sql是 SELECT * FROM award WHERE ni ...

  3. MySQL中的索引简介

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 一. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能. 第一.通过创建唯一性索引,可以保 ...

  4. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  5. MySQL索引介绍+索引的存储类型+索引的优点和缺点+索引的分类+删除索引

    什么是索引? 索引用于快速找出某个列中有一特定值的行,不使用索引,mysql必须从第1条记录开始读完整的表,直到找出相关的行.表越大,查询数据所花费的实际越多.如果表中查询的列有一个索引,mysql能 ...

  6. Mysql索引整理总结

    一.索引概述 1. 简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过 ...

  7. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  8. MySQL索引优化入门

    索引简介 官方定义:索引(Index) 是帮助MySQL高效获取数据的数据结构.大家一定很好奇,索引为什么是一种数据结构,它又是怎么提高查询的速度?我们拿最常用的二叉树来分析索引的工作原理.看下面的图 ...

  9. 再谈MySql索引

    一.索引简介 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 索引分单列索引(主键索引.唯一索引.普通索引)和组合索引.单列索引,即一个索引只包含单个列 ...

随机推荐

  1. Java上传文件

    Action /* * 后台商品管理的Action */ public class AdminProductAction extends ActionSupport implements ModelD ...

  2. AE IRasterCursor 改变栅格图层像素值

    1 public void ChangePixelValue(double xMax, double xMin, double yMax, double yMin,double[,] PixelCha ...

  3. 转载-------makefile 使用总结

    转载自:http://www.cnblogs.com/wang_yb/p/3990952.html 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的 ...

  4. 十二、shapes

    1. The control points are attributes on the shape which are usually arrays of points. Control points ...

  5. Linux系统安全保护措施

    1.系统安全记录文件 操作系统内部的记录文件是检测是否有网络入侵的重要线索.如果系统是直接连接到Internet的,且发现有很多人对系统做telnet/FTP登录尝试,可以运行“#more/var/s ...

  6. iOS项目中安装和使用 Cocoapods

    1.首先我们要打开我们的终端: 2.在终端输入 这条命令  gem sources -l 2.1如果是和我是一样的显示,则镜像已添加,无需更改,如果不一样,则需要进行更改 这里输出的如果是 https ...

  7. 用iptables 实现本地端口转发

    设定本机2121端口转发到21端口 iptables -t nat -A PREROUTING -p tcp -i eth0 -d -j DNAT --to iptables -t nat -I PO ...

  8. 简单的java socket 示例

    一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端发送的请求信息. d).通过输出流向 ...

  9. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  10. Hyperledge 开发环境配置常见问题

    一,安装工具 VBOX vagrant vagrant proxy golang 二,下载源代码 hyperledge gotools  三. 1. ==> default: package g ...