• 数据库注意事项


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

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

  • 相关阅读:
    maven 配置报错 JAVA_HOME not found in your environment
    file控件change事件触发问题
    自己动手写easyui的checkbox
    json数组传递到后台controller
    yii2 添加模块过程
    YII框架中php入口文件隐藏
    YII框架路由和URL生成
    Node.js脚本杀掉占用端口的进程
    Java单例模式的6种写法
    HTTPS时代已来,你做好准备了吗?
  • 原文地址:https://www.cnblogs.com/whatarewords/p/10711928.html
Copyright © 2020-2023  润新知