数据结构基础知识
- 常见数据结构:数组,链表
- 二叉树:
- AVL树(平衡二叉树):
-
红黑树:
-
B树(多叉平衡树):
-
B+树:
Mysql结构
- 采用B+树,三层树即能存至少2千万的索引数据
- 存储引擎是表级别的,每个表都可以单独设置存储引擎
- 根节点常驻缓存
- mylsam 索引文件和数据文件时分离的,叫非聚集型索引(稀疏索引),三个文件.frm/.MYD/.MYI
- 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_);