SQL编码规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,使用参数化查询和严格的入参校验。