程序员必会的SQL调优
首先了解数据库存储两大常用引擎 Innodeb和MyISAM
数据库引擎 | 存储方式 | 底层结构 | 事务 | 锁 | 索引 | 主外键 |
---|---|---|---|---|---|---|
MyISAM | 存储三个文件frm表结构和myd数据和myi索引 | B树 | No | 行级锁 | 非聚集 | No |
Innodeb | 存储两个文件 frm表结构和myd数据 | B+树 | Yes | 行级锁和表级锁(默认) | 聚集索引 | Yes |
B树是每一个节点都存在key和访问磁盘value的索引,B+树是叶子节点才存数据值,其它都是索引
索引类型
单值索引where name=‘xxx’ 复合索引where name=‘xx’ and email=‘xxx’ 唯一索引:值得是唯一值的
create index idx_user_name on user(name) //单值
create index idx_user_nameEmail on user(name,email) //复合
create unique index idx_user_id on user(id) //
Sql执行顺序
什么是索引
索引本质是数据结构,目的是提高查找效率,排好序的快速查找数据结构就是索引
数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,比如B树和B+树
B树
叶子节点存储的是磁盘数据的地址
查询快,但是增删慢,因为每次修改,还要修改指向数据的索引
优势: 提高检索效率,降低数据排序成本,避免全盘扫描
索引不是越多越好
索引也是一张表,保存了主键与索引字段,所以也占内存,
而且虽然提高查询速度,但是降低更新表的速度,因为mysql不仅要保存数据,还要保存一下索引文件每次更新添