使用MySQL有哪些注意事项。(重点)
使用MySQL有哪些注意事项。(重点)
提示
题眼:多角度,多场景。
这个题目非常需要经验,所以直接看参考答案。
重要
参考答案:
根据我自己工作经验来看,我觉得主要是三个方向的注意事项吧。第一个是索引,如果表里的数据量比较多的话,建议还是要建索引的,可以根据最常用的SQL语句,看一下查询条件和字段,建立一个联合索引。然后针对一些慢查询之类的,要做好排查,优化索引,像like呀,区间查询之类的不要放在核心流程里,会耽搁大量的时间。
第二个的话是事务,我自己用事务的时候就出过一些问题。印象最深的就是,我有一个业务它比较复杂,所以写了一个很长的事务,前后十几个SQL,结果执行时间过长,阻塞了其他的请求。其他同事发现有一些超时请求,查了好久才发现是我这里的问题。这个事情,我印象很深刻,因为自己的错误导致的问题,还影响了其他同事,当时还是很内疚的。解决办法的话,首先就是把大事务,拆成了两个小事务,然后加锁的时机也适当调整了下, 优先执行查询,最后再集中更新数据,因为MySQL是快照度升到当前读才加锁嘛,这样能尽量降低数据加锁的时间。关于事务其他的话,我在网上看到还有一些注意事项,像是防止事务死锁之类,我在工作中确实没有接触过,所以理解的不是很深刻。
最后一个的话,就是一些日常的使用。这个其实很多时候是被我们公司DBA上课上得最多。好几次提交表格变动都被打回来了。比如,想给表里加个字段,然后DBA又是问表里数据多少,又是问表的业务QPS多少,用的场景有哪些,我查完了,不给通过。说是这类变动要到晚上3-5点之间才能执行。后续,我才了解到这里有一个MDL锁的问题,之前有同事出过这样的事故。还有一些的话,像是建表必须带ID,int主键自增非空,必须带有创建时间和更新时间,并且更新时间要自动填充。一开始不太理解,后面学的多了,也就慢慢理解这些规定了。最近的话,我们有张表放的是用户一些历史操作记录,最近增长比较快,我们DBA就建议我们分库分表。因为但库表数据太多,可能出现慢查询,拖累整个数据库服务。
其他的话,我印象中还有一个需要注意的,就是最好有一个可以监控慢SQL的告警,我们一开始没有,都是DBA通知我们的。但是这样时效比较低嘛,总是被动查问题,后续我们领导就要求把慢查询接到告警群里,然后告警多的话,除了处理问题,周会的时候还会花十几分钟分析下SQL语句,看下是哪里出的问题。我觉得这个对我的提升也非常大。
