MySql划重点
2021/6/16 19:22:47
本文主要是介绍MySql划重点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、索引 索引数据结构 二叉树 红黑树 Hash表 BTree 存储引擎 MyISAM(非聚集) InnoDB(聚集) 索引最左前缀原理 Explain工具使用 索引最佳实践 1、全值匹配 2、最左前缀法则 3、不在索引列上做任何计算、函数、自动或者手动类型转换,会导致索引失效而转向全表扫描 4、存储引擎不能使用索引范围条件右边的列 5、尽量使用覆盖索引,减少select * 语句(虽然mysql会自动根据索引做一些优化) 6、mysql在使用不等于、大于、小于、not in、not exists的时候无法使用索引会导致全表扫描 7、is null、is not null一般情况下也不会使用索引 8、like以通配符开头mysql索引会失效导致全表扫描 9、字符串不加单引号索引失效 10、少用or或者in,因为mysql不一定会使用索引,内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引 11、范围查询优化,将大的范围拆成多个小的范围 二、Mysql底层原理 mysql内部结构 server层 store层 连接器 负责连接、授权,注意这里是长连接(默认8个小时),连接信息保存在单独的session会话中(重启mysql服务才可生效) 分析器 词法分析器原理 词法分析 语法分析 语义分析 构造执行树 生成执行计划 计划执行 优化器 优化原则? 执行器 调用InnoDB引擎接口执行 bin-log归档(server层) 三、索引优化实战 1、联合索引第一个字段用范围不会走索引 2、强制走索引 force index 3、覆盖索引优化 4、in和or在表数据量大的情况下会走索引,表记录不多的时候选择全表扫描 5、like KK% 一般情况都会走索引 索引下推 mysql如何选择索引 trace分析 filesort文件排序 单路排序 双路排序 sort_buffer默认1M,内存排序效率高于磁盘排序 索引设计原则 1、代码现行,索引后上 2、联合索引尽量覆盖条件 3、不要在小基数字段上建立索引 4、长字符串可以采用前缀索引 5、where和order by冲突时优先where 6、基于慢sql查询做优化 常见sql深入优化 1、order by和group by优化 1、mysql支持两种排序filesort和index,using index是指mysql扫描索引本事完成排序;index效率更高 2、order by满足两种情况会使用using index: a. order by使用索引最左前缀 b. 使用where子句与order by子句条件列组合满足最左前缀列 3、尽量在索引列完成排序 4、如果order by的条件不在索引列上就会产生using filesort 5、能用覆盖索引尽量用覆盖索引覆盖 6、group by和order by类似,其实质都是先排序后分组,对于group by的优化如果不需要排序可以加上order by null禁止排序 7、能在where中限定的条件就不要取having限定 2、分页优化 1、根据自增且连续的主键排序的分页查询 如果删数据导致主键不连续就会有问题 2、根据非主键字段的排序的分页查询 让排序时返回的字段尽可能少,所以可以让排序跟分页先查出主键,然后根据主键查找对应的记录 3、join关联查询优化 mysql表关联常见的有两种算法 Nested-Loop-Join Block Nested-Loop-Join 1、嵌套循环连接(NLJ算法) inner join底层会自动选择用小表来驱动大表 4、in和exists优化:小表驱动大表 5、count(*) 优化 1、对于myisam存储引擎做不带where的查询性能很高,因为表的总行数会被mysql记录在存储磁盘上,所以查询不需要计算;而innodb因为有mvcc机制需要计算 2、show table status 3、增加数据库计数表 四、mysql数据类型选择 数值类型 日期类型 字符串类型 五、Mysql事物 事物及ACID属性 隔离级别 读未提交 读已提交 可重复读 可串行化 六、Mysql锁机制 性能上分为乐观所和悲观锁 数据库读写上分析读锁和写锁 操作粒度上分为表锁和行锁 间隙锁某些情况下可以解决幻读问题 临界锁:行锁和间隙锁的组合 死锁优化建议: 1、尽可能让所有数据检索都通过索引来完成,避免无索引行升级为表锁 2、合理设计索引,尽量缩小锁的范围 3、尽可能减少检索条件范围,避免间隙锁 4、尽量控制事物大小,减少锁定资源量和实际长度,涉及事物加锁的sql尽量放在事物的最后执行 5、尽可能低级别食物隔离 七、MVCC多版本并发控制机制 undo日志版本链与read view机制 innodb引擎sql执行的BufferPool机制
这篇关于MySql划重点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程