Loading

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来进行优化

 

 

 

 

posted @ 2020-06-24 22:59  kopoo  阅读(56)  评论(0编辑  收藏  举报