一、索引
1.可以理解为排好序的数据结构,结合二分查找算法可以理解为什么索引能增加查询速度
2.可以提高数据库的检索效率,降低数据库的IO成本
3.索引也要占用空间,实际上也是一张表,保存了主键与索引字段、指向实体表记录
4.提高查询速度,但会降低更新表速度(update、delete、insert),在更新时,不仅要保存数据,还要保存索引文件,调整表数据更新带来的键值变化的索引信息
5.非主键索引叶子结点存储的是主键
7.索引最左前缀原理(针对聚合索引,若第一个字段没有,则不走索引)
二、MYSQL中常见的存储引擎
1.MyISAM(5.5之前)
1.不支持事物、不支持外键
2.访问速度快
3.对事物完整性没有要求或者表以select、insert为主的应用可以用这个引擎创建表
2.InnoDB
1.具有提交、回滚、和奔溃恢复能力的事物安全,其处理事物相对MYISAM会差一些
2.占用更多的磁盘空间来保留数据和索引
3.支持自动增长列、支持外键约束
3.MEMORY
1.将表中的数据存储到内存中,为查询和引用其他数据提供快速访问
2.MEMORY默认情况下使用的是散列索引,散列索引进行“相等比较非常快”,但是对“范围比较"的速度就慢很多了,因此散列索引值适合用在"=“和”<=>“操作符中,不适合在”>“和”<“操作符中,也不适合用在order by字句里。如果要使用”>“和”<"或者"between"可以使用btree索引来加快速度
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事物安全 | 支持 | 无 | 无 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
拆入数据的速度 | 低 | 高 | 高 |
对外键的支持 | 支持 | 无 | 无 |
三、B tree 与 B+tree
B tree
A:叶节点具有相同的深度,叶节点的指针为空
B:所有索引元素不重复,
C:节点中的数据索引从左到右递增
B+tree
A:非叶子节点不存储data(固定16K,可以存储更多的索引),只存储索引(冗余)
B:叶子结点包含所有的索引字段
c:叶子节点用指针连接,提高区间的访问性能