新闻详情

News Information

sql 语句标准
2017-07-06 23:05:26

1)SELECT 语句只获取需要的字段,禁止使用 SELECT * FROM 语句,这是有效防止新增字段对应用逻辑的影响,还能减少对性能的影响;

2)INSERT 语句必须显式的指明字段名称,不使用 INSERT INTO table value()。

3)禁止在 where 子句中对字段施加函数,如 to_date (add_time)>xxxxx,应改为:add_time >= unix_timestamp(date_add(str_to_date('20130227','%Y%m%d'),inter val -29 day))

4)正常业务 UPDATE、DELETE 语句不使用 LIMIT。对大批量数据批量操作时,建议加上 limit 分批处理。

5)写到应用程序里的 SQL 语句,禁止一切 DDL 操作(如 drop table,create table,truncate table,临时表操作),如对这些权限有要求,必需与 DBA 协商同意方可使用。

6)WHERE 条件中必须使用合适的类型,避免 MySQL 进行隐式类型转化,如 ISENDED=1,字段类型是 tinyint,那么不能是 ISENDED= ‘1’,否则走不了 ISENDED 字段上面的索引,会全表扫描。

7)避免在 SQL 语句进行数学运算或者函数运算,容易将业务逻辑和DB 耦合在一起。

8)INSERT、delete、update 语句量特别大时,建议使用 batch 提交。

9)禁止使用存储过程、触发器、函数等,容易将业务逻辑和 DB 耦合在一起,并且 MySQL 的存储过程、触发器、函数性能想比 Oracle有差距。

10)使用合理的 SQL 语句减少与数据库的交互次数。

11)禁止使用 ORDER BY RAND(),使用其他方法替换。

12)建议使用合理的分页方式以提高分页的效率。

13)InnoDB 表数据量特别大的避免使用 COUNT(*)操作,计数统计实时要求较强可以使用 memcache 或者 redis,非实时统计可以使用单独统计表,定时更新。

14)禁止使用%前缀模糊查询,例如 LIKE “%weibo”。

15)避免多余的排序。使用 GROUP BY 时,默认会进行排序,当你不需要排序时,可以使用 order by null,例如 Select a.OwnerUserID,count(*) cnt from DP_MessageList a group by a.OwnerUserID order by null;

16)开启事务的正确方式是 beginCommit,而不是 set autocommit=0,后者更改了会话的默认提交模式,在上一个事务执行完成后,就默认开启事务,即使是一个简单的查询,也处在事务模式中,容易造成锁堵塞。

17)合理使用事务。比如订单和订单明细表的一起插入,使用事务,防止异常情况下只有订单,而没有订单明细内容。同时不要过分使用事务,事务是会影响数据库并发性的