1.如何定位慢查询
1.开发阶段:可以开启慢查询日志,设置在多长时间内没有执行完的sql语句记录到日志里面。
2.运维和测试阶段有专门的工具;
2.sql语句分析
1.利用explain命令来对sql语句分析;
3.索引概念以及底层数据结构
1.存储引擎:存储引擎是基于表的;是存储数据,建立索引,更新/查询数据等技术的实现方式;
2.mysql5之后的存储引擎是InnoDB,支持事物,外键,表锁/行锁;
3.索引:帮助mysql高效获取数据的一种数据结构;在数据之外,数据库系统还维护着特定查找算法的数据结构;
4.B+数是B树的一种优化:
(1)阶数更多,路径更短,查找更快;
(2)磁盘读写代价更低。因为B+树的叶子节点存储数据,非叶子节点存储指针;
(3)叶子节点是一个双向链表,B+树更便于扫库和区间查询;
4.聚簇索引和非聚簇索引以及回表查询
(1)聚集索引:数据和索引放到一起,索引的叶子节点保存了行数据。必须有且只有一个。
(2)非聚簇索引:数据和索引分开存储索引叶子节点关联的是对应主键;可以有多个。
(3)回表查询:在非聚簇索引中找到对应的主键值,再到聚集索引中查找这行数据。
Tip:聚簇索引的选取规则:主键 > 唯一索引 > rowid
5.覆盖索引,超大分页优化
覆盖索引:查询使用了索引,并且需要返回的列在该索引中全部能够找到。
超大分页优化:我的思路,通过覆盖索引加子查询的形式优化。
select * from tb_fund t
(select id from tb_fund order by id limit 90000000,10) a
where t.id=a.id;
6.索引创建原则
(1)常见索引:主键索引,唯一索引,复合索引;
(2)索引创建原则:
数据量大,且查询比较频繁的表;
作为查询条件,排序,分组的字段;
7.索引失效的情况
(1)违反最左前缀法则 范围查询右边的列,不能使用索引;
(2)不要在索引列上进行运算操作, 索引将失效
(3)字符串不加单引号,造成索引失效。(
(4)类型转换 以%开头的Like模糊查询,索引失效
8.sql优化经验
表的设计优化,数据类型的选择
索引优化,索引创建原则
sql语句优化,避免索引失效,避免使用select * ….
主从复制、读写分离,不让数据的写入,影响读操作
分库分表
9.事物特性
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
10.并发产生的事物问题,事物隔离级别
11.undo log和redo log的区别
redo log: 记录的是数据页的物理变化,服务宕机可用来同步数据
undo log :记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据
redo log保证了事务的持久性,undo log保证了事务的原子性和一致性
12.解释一下MVCC
13.Mysql主从同步原理
MySQL主从复制的核心就是二进制日志binlog(DDL(数据定义语言)语句和 DML(数据操纵语言)语句) 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。 从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。 从库重做中继日志中的事件,将改变反映它自己的数据
14.Mysql分库分表
前提:
1,项目业务数据逐渐增多,或业务发展比较迅速
2,优化已解决不了性能问题(主从读写分离、查询索引…)
3,IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)
目的:
分担访问和存储压力