SQL使用规范

SQL使用规范

select 检索的规范性

1、尽量避免使用select *,join语句使用select * 可能导致只需要访问索引即可完成的查询需要回表取数。

一种是可能取出很多不需要的数据,对于宽表来说,这是灾难;一种是尽可能避免回表,因为取一些根本不需要的数据而回表导致性能低下,是很不合算。

2、严禁使用  select * from t_name  ,而不加任何where条件,道理一样,这样会变成全表全字段扫描。

3、MySQL中的text类型字段存储:

   3.1、不与其他普通字段存放在一起,因为读取效率低,也会影响其他轻量字段存取效率。

   3.2、如果不需要text类型字段,又使用了select *,会让该执行消耗大量io,效率也很低下

4、在取出字段上可以使用相关函数,但应尽可能避免出现 now() , rand() , sysdate() 等不确定结果的函数,在Where条件中的过滤条件字段上严禁使用任何函数,包括数据类型转换函数。大量的计算和转换会造成效率低下,这个在索引那边也描述过了。

5、分页查询语句全部都需要带有排序条件 , 否则很容易引起乱序

6、用in()/union替换or,效率会好一些,并注意in的个数小于300

7、严禁使用%前缀进行模糊前缀查询:如: select a,b,c from t_name where a like ‘%name’;  可以使用%模糊后缀查询如: select a,b from t_name where a like ‘name%’; 

8、避免使用子查询,可以把子查询优化为join操作

通常子查询在in子句中,且子查询中为简单SQL(不包含union、group by、order by、limit从句)时,才可以把子查询转化为关联查询进行优化。

子查询性能差的原因:

· 子查询的结果集无法使用索引,通常子查询的结果集会被存储到临时表中,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能 会受到一定的影响;

· 特别是对于返回结果集比较大的子查询,其对查询性能的影响也就越大;

· 由于子查询会产生大量的临时表也没有索引,所以会消耗过多的CPU和IO资源,产生大量的慢查询。

操作的规范性

1、禁止使用不含字段列表的INSERT语句

如:  insert into values ('a','b','c');   应使用   insert into t_name(c1,c2,c3) values ('a','b','c');  。

2、大批量写操作(UPDATE、DELETE、INSERT),需要分批多次进行操作

· 大批量操作可能会造成严重的主从延迟,特别是主从模式下,大批量操作可能会造成严重的主从延迟,因为需要slave从master的binlog中读取日志来进行数据同步。

· binlog日志为row格式时会产生大量的日志

posted @ 2021-11-26 15:41  大大龄码农  阅读(130)  评论(0编辑  收藏  举报