数据库注意事项

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、外键是在开发阶段用于保证程序对数据和操作有足够的验证时才用,正式上线的系统一般不会保留外键,原因是在高并发下,外键会消耗大量的数据库资源

总结:在查询的时候,要尽量让数据库引擎使用索引

以上是关于数据库注意事项的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text3自定义代码片段

常用的几个JQuery代码片段

JavaScript 有用的代码片段和 trick

Cg入门19:Fragment shader - 片段级模型动态变色

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

markdown 片段待办事项列表