当前位置: 首页 > 科技观察

Java高级编程——慢SQL问题经验总结

时间:2023-03-12 17:26:56 科技观察

1.SQL慢的原因遇到SQL慢的原因,不能简单的归结为SQL写的问题(虽然这是最常见的因素),实际上导致SQL慢的因素有很多,包括硬件的BUG和mysql本身的bug。根据出现的概率,分别列举如下:SQL写问题Lock业务实例相互干扰IO/CPU资源争用服务器硬件MYSQLBUG2.SQL写导致的慢SQL针对SQL写导致的慢SQL进行优化,它比较容易优化。上一节讲到,正确使用索引可以加快查询速度,所以我们在写SQL的时候需要注意索引相关的规则:字段类型转换导致没有索引,比如string没有引号type,andnumbertype引号等,可能不会使用索引,导致全表扫描;mysql不支持函数转换,所以不能在字段前加函数,否则索引将无法使用;不要在字段前加减;字符串比较长可以考虑部分索引,减少索引文件的大??小,提高写入效率;like%,前面没有使用索引;该索引不用于基于联合索引的第二个及后续字段的单独查询;不要使用选择*;排序请尽量使用升序;尝试对or查询使用union而不是(Innodb);综合指数的高选择性领域列在最前面;orderby/groupby字段都包含在索引中,减少排序,效率会更高。除了以上索引使用规则外,在编写SQL时还需要特别注意以下几点:尽量避免大事务的SQL,会影响数据库的并发性能和主从同步;分页语句的限制问题;删除表中的所有记录请使用truncate而不是delete;不要让mysql做多余的事情,比如计算;写带字段的SQL,防止后面改表导致的问题,性能比较好(涉及数据字典分析,请自行查询数据);在Innodb上使用selectcount(*),因为Innodb会存储统计信息;谨慎使用rand()的Oder。3、分析诊断工具在日常的开发工作中,我们可以做一些预防慢SQL问题的工作,比如在上线前使用诊断工具提前对SQL进行分析。常用的工具有:mysqldumpslowmysqlprofilemysqlexplain具体的使用和分析方法这里不再赘述。网上有丰富的资源可供参考。4、出现误操作和程序错误怎么办?这道题的解法显然主要是针对刚入职的年轻同事……其实,误操作和程序bug导致数据被删除或混淆的情况并不少见。开发商会更紧张。一个成熟的企业往往拥有完备的数据管理规范和丰富的数据恢复方案(初创公司除外),会进行数据备份和数据容灾。当您发现由于误操作或程序bug导致线上数据被误删除或更改时,千万不要惊慌,应及时联系DBA,尽快恢复数据(严重时直接停止服务),以尽量减少影响和损失。对于重要数据(比如资金)的操作,在开发的时候一定要反复测试,确保没有问题才可以上线。