美文网首页
mysql系列题目总结

mysql系列题目总结

作者: 机智的老刘明同志 | 来源:发表于2020-01-05 22:16 被阅读0次

1. mysql主从同步的原理,这种方式是同步还是异步?有什么问题?是否有可能发生数据丢失?

        原理:master运行时会产生binlog,slave通过单独的io线程,不断的读取binlog,并将其转化为relaylog(中继日志)并执行relaylog

        常规的mysql主从同步是异步同步(使用插件除外)
        同步过程中如果发生宕机可能会丢失数据,引申出半同步

        详情参考:mysql-主从同步  https://www.jianshu.com/p/f08f4265719d

2. mysql热备的搭建过程,使用mysqldump会不会锁表? 

        通过mysqldump先获取存量数据(导出), 然后在slave上配置master信息追binlog流水
        mysqldump --all-databases --master-data=2 --single-transaction --quick -R --events -uroot > /tmp/full.sql    
                --single-transaction:一致性备份(不会锁表)
                -q:采用快速的dump方式(提高导出性能)
                -R:导出存储过程,函数,和触发器
                --events:如果是5.1以上的版本使用,包含事件
                --master-data:在dump过程中记录主库的binlog和pos点(dump出的文件就会多出change master to这个语句),值为1时这个语句会执行,值为2时这个语句是注释状态

3. 谈谈对数据库隔离级别的认识? mysql默认的隔离级别是什么? mysql在默认隔离级别下能防止幻读吗? 

        四个隔离级别:1.读未提交    2.不可重复读    3.可重复读    4.串行化

        mysql的默认级别:RR(可重复读) 

        mysql在可重复读隔离级别(RR)下没有完全解决幻读问题,通过启用next-key锁(表锁和间隙锁)和MVCC机制来避免幻读。

         详情参考:mysql-事务 https://www.jianshu.com/p/f51e1c033ba8
                           mysql-mvcc  https://www.jianshu.com/p/2f5b62d9719b
                           mysql-锁   https://www.jianshu.com/p/7bfe623cabcf

4. 如果有联合索引(field1, field2) , 当查询语句 select * from test where field2 = xxx; 这个语句是否可以用到索引? 为什么

        不能, 最左前缀原则

5. 事务的四个特性分别是什么, 请具体介绍一下?

        ACID(原子性,一致性,隔离性,持久性)

        注意这里的一致性并不是CAP定理中的一致性

        一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。(我也没看懂这句话,大概意思就是俩人转钱,钱的总数要保持一致那么个意思)

6. myisam引擎和innodb引擎的区别有哪些? 

        innodb支持事务,myisam不支持
        innodb支持外键,myisam不支持
        innodb是聚簇索引(主键的索引存储了主键值和数据,辅助索引存储了主键的值,也就是说使用辅助索引会查询两次),myisam是非聚簇索引(主键索引和辅助索引都是指向数据的物理位置)
        innodb是行锁和表锁(这里注意行锁是上在索引上的),myisam是行锁
        innodb不支持全文索引(5.7版本之后支持),myisam支持
        innodb要有主键(如果用户没指定会生成个Unique key作为主键)myisam可以没有主键    
        myisam读要比innodb快(1.innodb要额外维护几个字段实现mvcc  2. innodb寻址要先到页然后到行,myisam直接寻址)
        myisam不适合大量插入(myisam是表锁,innodb是行锁)

7. mvcc特性实现的原理是什么? 

        1 快照读 2 undolog 3 每行隐藏的创建版本号与过期版本号

        详情参考:mysql-mvcc  https://www.jianshu.com/p/2f5b62d9719b

8. select * from test_table where field = xxx limit 1 for update, 这条语句是什么意思? 如果field字段上没有索引, 会锁住一条记录还是全表锁住? 

        加读锁(行级),没索引会锁全表(再次强调,锁是锁的索引)

9. 如何优化一条sql, 谈谈执行计划

        explain,不细说

10. redis的持久化方式有哪些? 每种持久化方式的优点和缺点是什么?

        aof 和 rdb。rdb是每隔一段时间,备份所有数据(快照)。aof是记录命令(增量)。

        现在redis是采用aof+rdb的方式来持久化(两次快照之间使用aof来持久化,也就是说先读rdb恢复到上个时间节点,然后使用aof增量来进一步恢复)

        rdb优缺点:优点:快照备份快,恢复也快。缺点:停机会丢失很多数据。。。  

        aof优缺点:优点:很精确,就算是停机也就丢几秒的数据。 缺点:频繁fsync(毕竟会记录每条命令啊)恢复也慢

11. mysql为什么要使用b+树?

        同二叉树相比,b-树更矮胖(m阶b+树,每个中间节点包含k-1个元素并有k个孩子,每个叶子节点包含 k-1个元素),可以减少IO次数
        同b-树相比,b+树的数据只存储在叶子节点上。且叶子节点之间增加了链表,这样获取节点时,不用中序遍历,这样便于快速定位数据,是减少磁盘IO的最佳方式。

12. 索引失效的几种情况:

        1.条件中有or,即使其他条件带索引也不会使用
        2.复合索引未用左列字段;    
        3.like以%开头; 
        4.需要类型转换 (where age = "10" 表中存的是int,但是sql写成string)
        5.where中索引列有运算;
        6.where中索引列使用了函数;
        7.如果mysql觉得全表扫描更快时(优化器会计算成本,然后选择方案,如果结果集太大,mysql会认为扫描全表更划算)

13. 超大数据量分页:

        select * from orders o
            inner join
                (select id from orders where created_at between '2019-10-17' and '2019-10-25'  limit 1000000, 10) e
            on o.id = e.id;

        通过使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行,这样可以减少mysql扫描那些需要丢弃的行数

14. 平均分:

        SELECT id,NAME,AVG(score) FROM stu GROUP BY NAME HAVING AVG(score) < 60   //平均分不及格的人

15. mysql主从复制延迟过大解决方案:

        1. MySQL之前是单线程复制,5.7版本推出多线程复制
        2. 分库(不同的业务使用不同的数据库)
        3. 硬件升级

        

        

相关文章

网友评论

      本文标题:mysql系列题目总结

      本文链接:https://www.haomeiwen.com/subject/uziznctx.html