数据结构基础知识

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

Mysql 索引总结

  • AVL树(平衡二叉树):

Mysql 索引总结

  • 红黑树:

Mysql 索引总结

  • B树(多叉平衡树):

Mysql 索引总结

  • B+树:

Mysql 索引总结

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,主键不自增会导致节点调整和树的重新平衡

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

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

  • 联合索引底层结构:

Mysql 索引总结

  • 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_);

 

相关文章: