对列进行函数转换或计算时会导致无法使用索引 。
· 不推荐:

文章插图
· 推荐:

文章插图
14、在明显不会有重复值时使用UNION ALL而不是UNION
· UNION会把两个结果集的所有数据放到临时表中后再进行去重操作
· UNION ALL不会再对结果集进行去重操作
15、拆分复杂的大SQL为多个小SQL
· 大SQL:逻辑上比较复杂,需要占用大量CPU进行计算的SQL
· MySQL:一个SQL只能使用一个CPU进行计算
· SQL拆分后可以通过并行执行来提高处理效率
十一、数据库操作行为规范1、超100万行的批量写(UPDATE、DELETE、INSERT)操作,要分批多次进行操作
· 大批量操作可能会造成严重的主从延迟
主从环境中,大批量操作可能会造成严重的主从延迟,大批量的写操作一般都需要执行一定长的时间,而只有当主库上执行完成后,才会在其他从库上执行,所以会造成主库与从库长时间的延迟情况
· binlog日志为row格式时会产生大量的日志
大批量写操作会产生大量日志,特别是对于row格式二进制数据而言,由于在row格式中会记录每一行数据的修改,我们一次修改的数据越多,产生的日志量也就会越多,日志的传输和恢复所需要的时间也就越长,这也是造成主从延迟的一个原因 。
· 避免产生大事务操作
大批量修改数据,一定是在一个事务中进行的,这就会造成表中大批量数据进行锁定,从而导致大量的阻塞,阻塞会对MySQL的性能产生非常大的影响 。
特别是长时间的阻塞会占满所有数据库的可用连接,这会使生产环境中的其他应用无法连接到数据库,因此一定要注意大批量写操作要进行分批 。
2、对于大表使用pt-online-schema-change修改表结构
· 避免大表修改产生的主从延迟
· 避免在对表字段进行修改时进行锁表
对大表数据结构的修改一定要谨慎,会造成严重的锁表操作,尤其是生产环境,是不能容忍的 。
pt-online-schema-change它会首先建立一个与原表结构相同的新表,并且在新表上进行表结构的修改,然后再把原表中的数据复制到新表中,并在原表中增加一些触发器 。
把原表中新增的数据也复制到新表中,在行所有数据复制完成之后,把新表命名成原表,并把原来的表删除掉 。
把原来一个DDL操作,分解成多个小的批次进行 。
3、禁止为程序使用的账号赋予super权限
当达到最大连接数限制时,还运行1个有super权限的用户连接super权限只能留给DBA处理问题的账号使用 。
4、对于程序连接数据库账号,遵循权限最小原则
程序使用数据库账号只能在一个DB下使用,不准跨库 程序使用的账号原则上不准有drop权限 。
最后
欢迎大家一起交流,喜欢文章记得关注我点赞转发哟,感谢支持!
推荐阅读
- MySQL索引原理
- MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别
- MySQL 百万级数据量分页查询方法及其优化
- Python连接MySQL数据库方法介绍
- MySQL高压缩引擎TokuDB 揭秘
- 如何创建MySQL用户帐户和授予权限
- 滥发信息是为了规范淘宝平台哪部分的规范 淘宝提示滥发信息
- mysql的安装 mysql数据库下载安装
- 一文看懂Mysql架构
- 详解MySQL兼容性show_compatibility_56参数
