SQL数据库的两种引擎:
MyISAM:
查询速度较快,适合读较多的场景。
不支持事务,也不支持崩溃后的数据恢复。
锁的粒度较大,只有表锁。
不支持外键
InnoDB:
查询的速度稍慢,适合写较多的场景。
支持事务,支持崩溃后的数据恢复,
支持行锁。
支持外键。
索引的分类:主键索引,基本索引,唯一索引,复合索引
索引的好处:
- 加快查询的速度
- 保证每一行数据的唯一性
- 把随机IO变成顺序IO
- 帮助服务器避免排序和临时表
索引能加快查询的原因:把无序的数据变成相对有序。
索引的坏处:
- 索引需要占用物理空间,如果是聚簇索引占用的空间更多
- 每次变更表数据的时候,索引都需要进行动态更新,数据维护时间长
- 创建,维护索引都需要大量的时间,开销大。
索引的数据结构种类:
- 哈希表:使用哈希表作为索引,适合查询绝大多数查询需求为单条记录的情况
- BTree:采用B+树作为索引数据结构,对于不同的数据库有不同的实现。
MyISAM数据库中:树的data域存储的是记录的地址,按照B+树搜索算法找到目标key值,然后取出对应的data域的地址,找到对应的记录。
InnoDB数据库中:数据表本身就是索引,这种索引也叫做聚簇索引。表的主键是key值,其余的索引是辅助索引,在通过辅助索引查找时,需要取出目标的主键,在主键索引中再查询一遍,因此主键的字段不宜过长,也要避免使用非单调字段。
网友评论