目的
为了规范MySQL的应用开发,减少开发过程中对MySQL的错误使用,提高数据存取效率,特制订本规范。
适用范围
所有mysql数据库。原则上,数据库设开发遵循本规范说明,特殊情况可例外,但需跟DBA说明原因。
规范
不允许不同业务模块的表连接查询
尽量不在数据库做运算,尽可能简单使用MySQL
SQL中避免出现now()、rand()、sysdate()、current_user()等不确定结果的函数
合理使用覆盖索引减少IO,避免排序
禁止在数据库中存储明文密码
禁止将数据字典表进行连接查询
禁止频繁使用的SQL语句中出现三个以上表的连接查询
用IN代替OR。SQL语句中IN包含的值不应过多,应少于1000个。
用UNION ALL代替UNION
禁止使用order by rand()
建议使用合理的分页方式以提高分页效率
SELECT只获取必要的字段,禁止使用SELECT *
减少与数据库交互次数,尽量采用批量SQL语句
拆分复杂SQL为多个小SQL,避免大事务
对同一个表的多次alter操作必须合并为一次操作
避免使用存储过程、触发器、视图、自定义函数等
禁止有super权限的应用程序账号存在
提交线上建表改表需求,必须详细注明涉及到的所有SQL语句(包括INSERT、DELETE、UPDATE),便于DBA进行审核和优化
禁止使用HINT