1. 什么是索引?
索引是一种排好序的数据结构(存储数据),可以帮助我们快速的进行数据的查找.
索引是帮助高效获取数据的数据结构,索引是一个文件
1)索引有哪些类型:
Hash
二叉树
红黑树
Hash:根据值进行Hash值 Hash(id),where id >1? 查找,不适合范围查找
二叉树(度为二的有序树)
二叉树:树的高度不可控IO次数多,深度为h 的非空二叉树最多有2h -1 (二的h次方-1)个结点,假如为自增主键查找元素4需要4次IO
红黑树:IO次数多(对二叉树的优化,避免节点太深,或者左拐树,或者右拐树 进行顺序查找)查找元素4需要2次IO(树的深度高)
B+Tree :树的高度是确定的(1-3层)
索引的衡量标准是什么?
IO次数较少,适合各种查询(范围等)
为什么要用B+Tree?
二叉树,红黑树 一个节点存储一个数据,树的H无法限制
MYISAM和 InnoDB
MYISAM:
ALTER TABLE mycity ENGINE=MYISAM(修改引擎)
三个文件 MYD(数据文件) ,FRM(元数据),MYI(索引文件)
查找元素1,0X123存的是逻辑地址,根据逻辑地址到查找MYD文件中得到具体的数据
id=1如何查找
id>1 如何查找?大于1顺着查找 ,先找到1在顺序查找
非聚集索引:
InnoDB:
1. 数据文件本身就是索引文件
2. 表数据文件本身就是按B+Tree组织的一个索引结构文件
3. 聚集索引中叶节点包含了完整的数据记录
4. InnoDB表必须要有主键,并且推荐使用整型自增主键
两个文件(IBD,FRM),以主键为索引来组织索引树,frm存储表的定义等
非聚集索引叶子节点存储的是主键值,需要两次IO,先查找到james,在到主键索引查找对应的数据
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。
若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步