A_5_06.Mysql优化
2021-04-14 17:06:28 0 举报
AI智能生成
全面、高效的知识图谱:A_5_06.Mysql优化!! 全面又深度的提升认知,达到实际应用的目的! 建议先纵观全局,掌握好大方向。 再根据自己的需要,针对性的学习某一个点,最后做到逐步由点及面。
作者其他创作
大纲/内容
MySQL
sql优化原则
1、选择需要优化的SQL
2、Explain和Profile入手
1、任何SQL的优化,都从Explain语句开始;Explain语句能够得到数据库执行该SQL选择的执行计划;
2、首先明确需要的执行计划,再使用Explain检查;
3、使用profile明确SQL的问题和优化的结果;
3、永远用小结果集驱动大的结果集
4、在索引中完成排序
5、使用最小Columns
6、使用最有效的过滤条件
7、避免复杂的JOIN和子查询
锁
1、共享锁<s lock>允许事务读取一行数据
2、排他锁<x lock>允许事务更新或者是删除一条数据
3、意向共享锁<is lock>事务想要获得一张表某几行的共享锁
4、意向排他锁<ix lock>事务想要获得一张表的某几行的排他锁
2、latch<轻量级锁,锁的时间非常短,用来操作临界资源>
3、一致性的非锁定读
4、一致性锁定读
5、死锁
事务
1、特性
1、原子性<数据库事务不可分割的单位,要么都做,要么都不做>
3、隔离性<事务是相互不可见的>
4、持久性<事务一旦提交,即使宕机也是能恢复的>
2、一致性<事务的操作不会改变数据库的状态,比方说唯一约束>
2、分类
1、扁平事务<使用最频繁的事务,要么都成功提交,要么都失败回滚>
2、带有扁平点的扁平事务<允许事务回滚到同一个事务中比较早的一个状态>
3、链事务<回滚到最近的一个保存点,在所有的事务都提交之后才会释放锁,并且下一个事务的开始需要上一个事务来进行通知>
4、嵌套事务<树结构,只有当父级事务提交之后子级事务才会提交,任意一个父级事务的回滚都会导致下面的子级事务回滚>
5、分布式事务<操作两个不同的数据库,使其实现数据的同步,例如将中国银行的钱转到工商银行,这个不同银行的不同数据库,为分布式事务>
3、隔离级别
1、read uncommittted<脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据>
2、read committed<不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。>
3、repeatable read<幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。>
4、serializable<锁表,不会出现意外情况>
扫码回复【脑图】下载 120 张超清晰脑图源文件
分支主题
执行流程
1、查询缓存
2、解析器生成解析树
3、预处理再次生成解析树
4、查询优化器
5、查询执行计划
6、查询执行引擎
7、查询数据返回结果
表结构对性能的影响
1、冗余数据的处理(可以提高系统的整体查询性能<三范式>)
1、每一列只能有一个值
2、每一行可以被唯一的区分
3、不包含其他表的已包含的非关键信息
2、大表拆小表
1、一般不会设计属性过多的表
2、一般不会超过500到1000万数据的表
3、有大数据的列单独拆为小表
3、根据需求展示更加合理的表结构
4、常用属性分离为小表
索引
1、类型
2、方法
3、创建
1,较频繁的作为查询条件的字段应该创建索引;
4,不会出现在WHERE 子句中的字段不该创建索引;
4、执行计划与执行明细
1,Explain:可以让我们查看MYSQL执行一条SQL所选择的执行计划;
2,Profiling:可以用来准确定位一条SQL的性能瓶颈;
JOIN的原理
0 条评论
下一页