优化
如何定位慢查询
mysql中慢查询通常发生在以下几种情况,聚合查询,多表查询,表数据量过大查询,深度分页查询。
表象:页面加载过慢,接口压测响应时间过长(超过1s)
定位慢查询的方法主要有两种。方法一是利用开源工具(调试工具有Arthas,运维工具有Prometheus,Skywalking);方法二是开启MySQL自带的慢日志功能在MySQL的配置文件中(/etc/my.cnf)配置如下信息
sql执行很慢,如何分析?
可以用EXPLAIN获得DESC命令获取Mysql如何执行SELECT语句信息
索引
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
聚集索引和非聚集索引
覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。(不需要回表查询)
索引失效
SQL优化
事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务的特性:
原子性A:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性C:事务完成时,必须使所有的数据都保持一致状态。
隔离性I:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境运行。
持久性D:事务一旦提交成功,他对数据库的数据的改变是永久的。
并发事务问题
MVCC
mvcc:多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,mvcc的具体实现依赖于数据库记录中的隐藏字段,undo log,readView。
主从同步
分库分表