zoukankan      html  css  js  c++  java
  • 优化数据库语句的几个简单技巧

    1. 索引

    a. SQL语句的 where 和 join 部分中用到的字段,都应该加上索引。

    b. 尽量用加索引的字段进行直接判断,不要对加索引的字段进行转化后再判断,因为这样会导致加的索引无效,达不到优化的效果。

    e.g. 查询A表中所有2016年的数据

    CREATE INDEX A_idx ON A (date_column);
    
    SELECT text, date_column
      FROM A
     WHERE TO_CHAR(date_column, 'YYYY') = '2016';
    

     上述的索引 date_column并没有生效,这个查询可以改为比较 date_column 的范围。

    SELECT text, date_column
      FROM A
     WHERE date_column >= TO_DATE('2016-01-01', 'YYYY-MM-DD')
       AND date_column <  TO_DATE('2016-01-01', 'YYYY-MM-DD');

    c. 建立的索引,尽可能的 cover 你的 SQL 语句。

    e.g. 下面2个查询语句都用了A表中的b字段

    CREATE INDEX A_idx ON A (a, b);
    
    SELECT id, a, b
      FROM A
     WHERE a = :a
       AND b = :b;
    
    SELECT id, a, b
      FROM A
     WHERE b = :b;
    

    索引 cover 了第一个 select 语句,但是第二个 SQL 语句并没有最大程度的利用索引。可以对索引进行修改以达到最大利用的效果。

    CREATE INDEX A_idx ON A(b, a);
    

    d. 加索引的字段,如果进行了 like 通配符过滤某些字符串,这时候的索引是无效的。

    CREATE INDEX A_idx ON A (text);
    
    SELECT id, text
      FROM A
     WHERE text LIKE '%TERM%';
    

     注意: 如果整个查询所有引用的列都包含在索引中,那么这个查询就不需要直接访问表,查询速度就会提高。

    2. 移除不需要的表和字段

    不要将不需要的字段返回 SQL 客户端。

    不要在SQL语句查询不需要的表

    3. 移除外部链接

    4. 尽量不要对字段进行转换后再比较

    直接用原有字段查询比转换后再查询的效率高。比如本文第一个查询2016年数据的sql语句。

  • 相关阅读:
    EFCore 中执行存储过程返回DataSet DataTable
    继 首次使用DoNetCore EFCore DbFirst 更新数据实体
    在DoNetCore MVC 中如何使用AutoMapper
    一款新的好用的SSH工具——FinalShell
    常用转义字符统计
    在MyEclipse安装Spket插件,用于jQuery代码提示
    Java连接Oracle数据库常用方法
    Java注解
    Eclipse怎样对项目进行重命名?
    Web Api试图加载格式不正确的程序,解决方法
  • 原文地址:https://www.cnblogs.com/lan-writenbook/p/6024590.html
Copyright © 2011-2022 走看看