SQL编码规范

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

车联网技术SQL编码规范

1、严谨使用标量子查询(分页可以使用)

select (select ... from a where a.id=b.id) from b

2、不要使用INSERT INTO table VALUE(?,?,?,?,?)格式,要指出

具体要赋值的字段,INSERT的效率会有提高。

3、SELECT与FROM语句之间只定义返回的字段名,除非返回所

有的字段,尽量不要使用* ,字段提取要按照“需多少、提多

少”的原则(因为大批量数据的抽取会影响SQL缓存的效率)4、避免使用COUNT(*),因为COUNT(*)会对全字段做聚集,建

议使用COUNT (0)或COUNT(1)这样的查询语句,有主键ID,尽量使用count(id)

5、使用OR 会引起全表扫描,比较影响查询效率,尽可能少用或

不用,实在不行可以用UNION ALL代替。NULL的检索要回避

一下。

6、使用DISTINCT是为了保证在结果集中不出现重复值,但是

DISTINCT会产生一张工作表,并进行排序来删除重复记录,

这会大大增加查询和I/O的操作次数。因此应当避免使用

DISTINCT关键字

7、负逻辑如!=、<>、not in等,都会导致全表扫描来完成查询。

当表较大时,会严重影响系统性能,可以用别的操作来代替。

8、join 与on 必须严格匹配,不允许出现没有on的join

9、Where 子句中的连接顺序:数据库采用自下而上的顺序解析

where子句,根据这个原理,表之间的连接必须写在其他where 条件之前,那些可以过滤掉大量记录的条件必须写在where子句的末尾。如:

低效:select * from emp e where sal>5000 and job = ‘manager’ and 25< (select count (*)from emp where mgr=e.empno);

高效:select * from emp e where 25<(select count(*) from emp where mgr=e.empno) and sal>5000 and job=’manager’;

10、在使用UNION或UNION ALL 的前后的两个SQL需要加( )。

11、避免使用IN和NOT IN ,使用EXIST和NOT EXIST代替。

12、将计算从等号左边移到右边,例如:把a*2>4改为a>4/2;把TO_CHAR(zip) = ‘94002’ 改为zip = TO_NUMBER('94002')。

13、不要使用NOT,如Goods_no != 2,要改为: where Goods_no>2 or Goods_no<2

14、不要使用is null , 如WHERE DEPT_CODE IS NOT NULL 要改为: WHERE DEPT_CODE >=0;

15、尽量把循环的操作封装到SQL写的存储过程里,因为存储过程都在服务端执行,所以没有数据往返的消耗。有机会,将一些查询封装到函数里,而在普通SQL里使用这些函数,同样是很有效的优化。

16、索引列上>= 代替> 如:

高效:select * from emp where deptno >=4

低效:select * from emp wher e deptno > 3

17、防SQL注入:对于用户交互的SQL,使用参数化查询和严格的入参校验。

相关文档
最新文档