数据库注意事项
Posted whatarewords
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库注意事项相关的知识,希望对你有一定的参考价值。
1、Sql语句尽量不*,只搜索使用的字段
2、实体类添加字段描述(注明主键),可添加非数据库字段,标记为“扩展字段”
3、sql语句的查询条件在实体类的set方法中要添加判断,否则检索记录为0,如:
public void setArea(String area) { if(area == ""){ this.area = null; }else{ this.area = area; } }
4、sql.xml中的<sql>仅可在本文件内部调用,其它可被外部调用
5、参数最好封装成对象,防止后期添加参数
6、修改、删除操作在façade层添加断言,如 Assert.notNull(invoice.getId(), "invoice.getId() must be not null");
7、动态条件<isnotnull>可不置于<dynamic>内部使用
8、insert语句设置一个必填项,在DAOImpl中使用断言非空判断
9、若方法业务复杂涉及到事务,命名必须以do、insert、update、delete、process、save开头
10、避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描
11、如果是连续数值,可以用between代替。如下:
SELECT * FROM t WHERE id BETWEEN 2 AND 3
12. 如果是子查询,可以用exists代替。如下:
SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)
13、用union代替or。如下:
SELECT * FROM t WHERE id = 1 UNION SELECT * FROM t WHERE id = 3
14、避免在字段开头模糊查询,如下:SELECT * FROM t WHERE username LIKE ‘%li%‘
15、避免在where条件中等号的左侧进行表达式、函数操作,可以将表达式、函数操作移动到等号右侧。如下:SELECT * FROM t2 WHERE score = 10 * 9
16、当数据量大时,避免使用where 1=1的条件,避免使用distinct
17、避免一个个循环插入,insert into select批量插入
18、ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
19、尽量多使用COMMIT:只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
20、在java代码中尽量少用连接符“+”连接字符串!
21、避免在索引列上使用NOT 通常,我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.
22、避免在索引列上使用计算. WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描
SELECT … FROM DEPT WHERE SAL *12>25000; //低效 SELECT … FROM DEPT WHERE SAL >25000/12;//高效
23、外键是在开发阶段用于保证程序对数据和操作有足够的验证时才用,正式上线的系统一般不会保留外键,原因是在高并发下,外键会消耗大量的数据库资源
总结:在查询的时候,要尽量让数据库引擎使用索引
以上是关于数据库注意事项的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门19:Fragment shader - 片段级模型动态变色