SQL代码检查

摘要:
11.避免在where子句中对字段进行null值判断。

1.使用 insert、select必须给出字段列表

因为使用*代替所有的字段后,如果表结构发生变化,应用程序可能出现无法识别的情况。比如java的Struts2+spring+ibatis框架,sql语句在XML档配置,内容:
<select parameterClass="java.util.HashMap" resultClass="TableClass">
select * from t;
</select>
这个配置需要TableClass的属性与table的栏位完全相同(包括大小写),如果表结构变更,但是TableClass类没有同步的话,这个查询将出错。
2. 同一SQL必须完全相同
原因是在Oracle完全一样SQL语句可以实现共享,完全是指大小写、空格位置都必须一致。
3. 避免隐形转换
select field1,field2
from t
where param = to_nchar(:param)
栏位param与参数param类型不一致时发生类型转换,这可能导致性能问题。
4. 避免大小写转换 (与5类似)
5. 避免对(索引)栏位使用函数
比如很多场景需要使用日期查询
select *
from t
where to_char(date, ‘yyyy/mm/dd’) BETWEEN ‘1999/01/01’ AND ‘2012/10/16’
6. 避免使用前置的Like(%abc)模糊查询
这将导致全表扫描,建议使用后置Like(abc%)模糊查询,或者搜索引擎。
7. 当list大于20时,不要使用In list
a in (:1,:2,:3,…,:n) --- n > 20
8. 避免使用!=或<>操作符,这将导致全表扫描
9. 避免在where子句中对字段进行函数操作,这将导致全表扫描
select id from t where substring(name,1,3)='abc'; --name以abc开头的id
10. 避免在where子句中的”=”左边进行函数、算术运算或其他表达式运算,否则将无法正确使用索引。
11. 避免在where子句中对字段进行null值判断。
select id from t where num is null;
这将导致全表扫描

免责声明:文章转载自《SQL代码检查》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇schtasks命令CSS制作凹环特效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java 利用反射调用静态方法的示例

内容简介 主要介绍使用反射的机制来调用执行类中的静态方法。 静态方法 public class GisUtil { private final static Logger logger = LoggerFactory.getLogger(GisUtil.class); public static ExportMethodResu...

oracle教程:PLSQL常用方法汇总

oracle教程:PLSQL常用方法汇总 在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLIFIED CHINESE';主要知识点:一、有关表的操作1)建表 create table test as sel...

iview 组件的额外传参问题记录

在使用iview组件的时候,经常遇到额外传参的问题,一般情况下可以使用以下2种方法都可以解决: 1、直接在方法后面输入参数,有的时候借用$event获取当前dom信息,在某些特定情况下可以将参数绑定在元素的dataset中获取。 // 组件 <Input :value="item" @on-blur="changeQaI...

Oracle中特殊的INSERT语句

---------------------------------------insert into table-name select ...---------------------------------------insert into table-name values(coL-values, ... default)--------------...

SQL Server跨服务器查询

创建链接服务器 exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址'exec sp_addlinkedsrvlogin 'ITSV', 'false ',null, '用户名', '密码' --查询示例select * from ITSV.数据库名.dbo.表名 --导入示例selec...

[转]Oracle存储过程总结

原文地址:https://www.cnblogs.com/tingbogiu/p/5641000.html 1.存储过程结构 1.1 第一个存储过程  create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in out varchar2 ) as...