查看原文
其他

面试官:你有过一线的MySQL实战经验,能给我详细聊聊吗?

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!


作者:石展


本文来自一线的实战经验,主要针对DBA和后端开发人员,总是在灾难发生后,才想起容灾的重要性;总是在吃过亏后,才记得曾经有人提醒过。文末是详细的视频讲解和PDF下载。


这篇文章建议你一定要背了。


核心军规


  1. 尽量不在数据库做运算

  2. 控制单表数据量 纯INT不超过10M条,含Char不超过5M条

  3. 保持表身段苗条

  4. 平衡范式和冗余

  5. 拒绝大SQL,复杂事务,大批量任务


字段类军规


  1. 用好数值字段,尽量简化字段位数

  2. 把字符转化为数字

  3. 优先使用Enum或Set

  4. 避免使用Null字段

  5. 少用并拆封Text/Blob

  6. 不在数据库中存图片


索引类军规


  1. 谨慎合理添加索引

  2. 字符字段必须建立前缀索引?

  3. 不在索引列做运算

  4. 自增列或全局ID做InnoDB主键

  5. 尽量不用外键


SQL类军规


  1. SQL尽可能简单

  2. 保持事务连接短小

  3. 尽可能避免使用SP/Trigger/Function

  4. 尽量不用Select *

  5. 改写Or为IN()

  6. 改写Or为Union

  7. 避免负向查询和%前缀模糊查询

  8. Count不要使用在可Null的字段上面

  9. 减少Count(*)

  10. Limit高效分页,SELECT * FROM message WHERE id > 9527 (or sub select) limit 10

  11. 使用Union ALL 而不用Union

  12. 分解链接,保证高并发

  13. Group By 去除排序

  14. 同数据类型的列值比较

  15. Load Data导入数据,比Insert快20倍

  16. 打散大批量更新,尽量凌晨操作


约定类军规


  1. 隔离线上线下

  2. 禁止未经DBA认证的子查询

  3. 永远不在程序段显式加锁

  4. 表字符集统一使用UTF8MB4


说明:后台回复关键字 mysql 获取相关资料,如下图所示。



最后,也欢迎各位读者入群来交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?


---END---



热文推荐

面试官:站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误,你能给我分析一下吗?

面试题:你简历中说你擅长JVM调优,给我一个关于Code Cache调优的案例吧。

面试题:jdk那些类的底层实现使用过位运算,并且给你印象最深?

给个在看

人气满满

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存