概念:
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。
InnoDB(B+树)
适用场景:
1)经常更新的表,适合处理多重并发的更新请求。
2)支持事务。
3)可以从灾难中恢复(通过bin-log 日志等)。
4)外键约束。只有他支持外键。
5)支持自动增加列属性auto_increment。
索引
索引(Index)是帮助MySQL 高效获取数据的数据结构。常见的查询算法,顺序查找,二分查找,二叉排序树查找,哈希散列法,分块查找,平衡多路搜索树B 树(B-tree)
为了使查询效率更快,所以我们用索引。
有哪些?
1.聚集索引(主键索引):
在数据库里面,所有行数都会按照主键索引进行排序。
2.非聚集索引
给普通字段加上索引。
3.联合索引
就是好几个字段组成的索引,称为联合索引。
key
'idx_age_name_sex'
(
'age'
,
'name'
,
'sex'
)
联合索引遵从最左前缀原则,什么意思呢,就比如说一张学生表里面的联合索引如上面所示,那么下面A,B,C,D,E,F哪个会走索引呢?
A:select * from student where age =
16
and name =
'小张'
B:select * from student where name =
'小张'
and sex =
'男'
C:select * from student where name =
'小张'
and sex =
'男'
and age =
18
D:select * from student where age >
20
and name =
'小张'
E:select * from student where age !=
15
and name =
'小张'
F:select * from student where age =
15
and name !=
'小张'
A:遵从最左匹配原则,age在左边,所以A走索引。
B:直接从name开始,没有最左匹配,所以不走索引。
C :虽然从name开始,但是有索引最左边的age,mysql内部会自动转成where age = 18 and name = '小张' and sex = '男' 最终还是遵循最左匹配。
D:因为age>20是范围,范围字段会结束索引对范围后面索引字段的使用,所以只有走了age这个索引。
E:虽然遵循最左匹配,但是不走索引,因为!=不走索引。
F:只有age走索引,name不走索引。
常见索引原则
1.选择唯一性索引,
唯一性的索引的值是唯一的,可以更快速的通过该索引来确定某条记录。
2.为经常需要排序的,分组和联合操作的字段建立索引。
3. 为常作为查询条件的字段建立索引。
4. 限制索引的数目:
越多的索引,使得更新表变的很浪费时间。
5.尽量使用数据量少的作为索引。
如果索引的值很长,那么查询的速度会收到影响。
6.尽量使用前缀来作为索引。
7。删除不再使用或者很少使用的索引。
8.最左前缀匹配原则,
9.尽量选择区分度高的列作为索引:区分度的公式是表示字段不重复的比例。
10.索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。
11.尽量的扩展索引,不要新建索引。