Mysql 索引总结

数据结构基础知识

  • 常见数据结构:数组,链表
  • 二叉树:

  • AVL树(平衡二叉树):

  • 红黑树:

  • B树(多叉平衡树):

  • B+树:

Mysql结构

  1. 采用B+树,三层树即能存至少2千万的索引数据
  2. 存储引擎是表级别的,每个表都可以单独设置存储引擎
  3. 根节点常驻缓存
  4. mylsam 索引文件和数据文件时分离的,叫非聚集型索引(稀疏索引),三个文件.frm/.MYD/.MYI
  5. innodb :
  • 表数据文件本身就是按照B+Tree组织的索引结构文件;

  • 两个文件.frm/.ibd;

  • 叶节点包含完整的数据记录,这种叫聚集索引(聚簇索引);nnoDB表数据文件本身就是主索引。

    InnoDB默认对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。一般来说,InnoDB 会以聚簇索引的形式来存储实际的数据,它是其它二级索引的基础。

  • 为啥要用整形自增主键:1,整形数据比较速度大于字符型,B+树会大量比较。2,主键不自增会导致节点调整和树的重新平衡

  • 非主键索引结构叶子节点存储着主键值,为保持一致性和节省存储空间

  • 最左前缀原则:查询从索引最左前列开始并且不跳过索引中的列

  • 联合索引底层结构:

  • like 左侧用%不走索引解决:mysql 5.6已经解决了此问题,注意,不能用select *
  • locate 示例:EXPLAIN select ID_ from ACT_RU_TASK  t where locate('tan',ASSIGNEE_)>0 ;注意,不能用select *,否则不走索引
  • find_in_set 示例:EXPLAIN select ID_ from ACT_RU_TASK  t where FIND_IN_SET('tan',ASSIGNEE_);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值