数据库注意事项

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

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

转载于:https://www.cnblogs.com/whatarewords/p/10711928.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值