(1)使用prepared statement,能够提高性能并避免SQL注入。数据库
(2)使用IN代替OR。SQL语句中IN包含的值不该过多,应少于1000个。ide
(3)禁止隐式转换。数值类型禁止加引号;字符串类型必须加引号。函数
(4)避免使用JOIN和子查询。必要时推荐用JOIN代替子查询。性能
(5)禁止在MySQL中进行数学运算和函数运算。索引
(6)减小与数据库交互次数,尽可能采用批量SQL语句。事务
(7)拆分复杂SQL为多个小SQL,避免大事务。字符串
(8)获取大量数据时,建议分批次获取数据,每次获取数据少于2000条,结果集应小于1M。数学
(9)使用UNION ALL代替UNION。it
(10)统计行数使用COUNT(*)。class
(11)SELECT只获取必要的字段,禁止使用SELECT *。
(12)SQL中避免出现now()、rand()、sysdate()、current_user()等不肯定结果的函数。
13)INSERT语句必须指定字段列表,禁止使用 INSERT INTO TABLE()。
(14)禁止单条SQL语句同时更新多个表。
(15)禁止使用存储过程、触发器、视图、自定义函数等。
(16)建议使用合理的分页方式以提升分页效率。
(17)禁止在从库上执行后台管理和统计类功能的QUERY,必要时申请统计类从库。
(18)程序应有捕获SQL异常的处理机制,必要时经过rollback显式回滚。
(19)重要SQL必须被索引:update、delete的where条件列、order by、group by、distinct字段、多表join字段。
(20)禁止使用%前导查询,例如:like “%abc”,没法利用到索引。
(21)禁止使用负向查询,例如 not in、!=、not like。
(22)使用EXPLAIN判断SQL语句是否合理使用索引,尽可能避免extra列出现:Using File Sort、Using Temporary。
(23)禁止使用order by rand()。
(24)禁止使用REPLACE INTO和INSERT ON DUPLICATE KEY UPDATE的语句类型,除非业务场景特殊且DBA评估经过。