MySQL数据库高级二:索引优化
索引优化非常的重要
1、预热


java开发
DBA培训很少,需要经验磨练
索引优化的效果非常好
左外连接


MySQL没有全连接
7种join一定要会写
具体见武林的例子

union的字段顺序要相同
6、

union all不会去重但效率更高
字段顺序一致!!!
7、



写法1

子查询很重要
写法2

写法3

写法4

作业再议P341
2、索引简介


索引结构
二叉树缺点:最坏情况是链表
balance tree :b树
平衡二叉树
B树和B+树

红色的是指向数据的指针

B+树

MySQL用的是B+树


B+tree的IO次数比Btree的IO少1/3


索引

![]()

group by更耗性能

Explain


![]()

![]()
先执行大的在执行小的

先从大到小再从上到下

在外层是主要查询,内层是衍生查询

key_len越长越好

主从复制简介
主机写到日志中,从机读取进行模仿
避免主从复制不同


操作不说了,是sql编程
创建函数
面试别提存储过程,节外生枝

优化效果明显 0.1—>0
int 型最多5
varchar几十
key_len

1、单表索引:全值匹配我最爱,where筛选字段有多少索引用多少
![]()
索引的顺序不影响:优化器会自动调整顺序

索引层层匹配
索引分层,一层然后又一层
先命中一层然后到与之相关的下一层

一一命中,第一层的每个叶子点都是一棵树
2、
按照顺序命中
![]()

俩个速度都是全表扫描很慢

创建索引

上面的用上了索引,下面没有
3、
4、
![]()
右边的字段失效

范围查询字段,建立索引的时候放在前面后面的字段失效

5、
![]()

留个文件表示介绍效率低,职场上要学会说话
6、

7、

按照首字母建立的树,如果首字母不确定无法建立索引树,最好首字母确定
8、
![]()

类型转换会使类型失效
类型一定要匹配
一般性建议
过滤性好的字段,就是定位范围小的
关联查询优化

俩个表的关联查询。第一个表叫驱动表,另一个表叫被驱动表,驱动表建立索引没有意义



4个语句的执行效率
第二

这个才是最快的、第一

5.7自动进行了优化

第4点是因为虚拟表没有办法建立索引,因此子查询最好不要放在被驱动表上
最好不要用子查询

3和4的区别,3是把子查询的虚拟表作为驱动表, 被驱动表给了实体表因此有索引优化

练习题
需求拆开来写
选取非掌门人的成员

索引失效需要优化,子查询优化

排序分组优化
order by就看extra
没有过滤条件索引不可使用
![]()
![]()
![]()
order by和where的内容都要有索引,索引顺序不能变
![]()

索引优化排序

单路排序更加的快因为是在内存进行排序

覆盖索引尽量少的使用select*,多用具体的字段名

8个sql的作业
straight_join来进行优化


浙公网安备 33010602011771号