索引概述
索引是一种数据结构,帮助mysql高效获取数据
无索引:全表扫描,效率低
有索引:
索引优点:
提高数据查询效率
通过索引的排序,降低了数据排序成本
索引缺点:
占用更多空间
但增删改的效率会降低
结构
Btree
最多4个,如果迎来第五个,则则中间的向上
B+tree
与Btree的区别:
1.所有数据都会在叶子节点
2.叶子节点形成一个单向列表
mysql的B+tree是
hash索引
使用哈希算法,存储在哈希表中
通常查询效率高
不支持范围查询
不支持过索引排序
B+tree的特点
相对于二叉树,层级更少,查询效率更高
相对于Btree,所有数据都会保存在叶子节点,占用更多,指针更少,性能更低
分类
主键索引:只能一个 primary
唯一索引:多个 unique
常规索引:多个
在Innodb里,根据存储方式分类
聚集索引:必须有,只能一个
二级索引:可以有多个
聚集索引挂的是这一行的行数据(row)
二级索引挂的是id
第一个效率更高
语法
创建索引:create index 索引名 on 表名(字段名...)
查看索引:show index from 表名
删除索引:drop index 索引名 on 表名
性能分析
查看执行频次
先找出业务的增删改查哪个业务多
show global status like 'Com___';
慢查询日志
慢查询日志默认不开启
查看是否开启慢查询
通过慢查询日志定位查询效率较低的sql
show profiles
explain执行计划
在select前加上explain即可
使用规则
SQL优化
插入数据优化
若要插入大量数据:
不要一条一条的插入,应该批量插入
手动事务提交
主键顺序插入
不使用insert,而是使用load指令