zoukankan      html  css  js  c++  java
  • orcle:sql优化

    查询时将行较少的表连接到后面

     连接是使用完全限定的列引用

    多表连接的时候,为表创建别名,或者不创建,select语句指定属性在哪个列比不指定要好,不指定的话数据库需要搜索全部的表来获得列,即

    SELECT p1.col_name , p2.col_name
    FROM table_name p1, table_name p2
    WHERE expr1;

    两个 列都有指定在哪个表。

    添加表索引

     数据库索引用于查找表的特定行。索引的确定是当向表添加一行时,需要附加时间来更新新行的索引。

    oracle 数据库自动为表的主键和包含在唯一约束中(UNIQUE)的列创建索引。

    而在执行分级查询(包含 CONNECT BY 的查询),应该为 START WITH 和 CONNECT BY  子句所引用的列添加索引。

    http://www.cnblogs.com/Azhu/archive/2012/04/03/2431132.html 有一些 CONNECT BY  的分级查询用法。

    使用 WHERE 而不是HAVING

     WHERE 子句用于过滤行,HAVING 子句用于过滤行组。

    --BAD
    SELECT *
    FROM table_name
    GROUP BY column_name
    HAVING column_name IN ('1','2');
    --GOOD
    SELECT*
    FROM table_name
    WHERE column_name IN ('1','2')
    GROUP BY column_Name;

     这两个语句结果是一样的。

    但是下面的语句明显好很多。

    使用EXISTS 而不是 IN

    IN 用于检查一个值是否包含在列表中。

    EXISTS只检查行的存在性,而 IN 检查实际的值。

    eg: 查找一个在表一中的数据是否在表二中,如果是输出,

    生活例子:从商品表中查找已经被购买了的商品

    --BAD
    SELECT *
    FROM table_name1
    WHERE column_name IN
    ( SELECT column_name
      FROM table_name2)
    ;
    --GOOD
    SELECT*
    FROM table_name1 outer
    WHERE EXISTS
      (SELECT 1
      FROM table_name2 inner
      WHERE outer.column_name = inner.column_name)
    ;

    使用EXISTS 而不是DISTINCT

    DINSTINCT用于禁止重复行的显示

    这种情况是基于外表,就是数据来源的表没有重复行,内表用重复行的情况,用上面的例子

    eg: 查找一个在表一中的数据是否在表二中,如果是输出,表一不会有重复的数据,表二会有重复的数据

    生活例子:从商品表中查找已经被购买了的商品,这样商品列表唯一,但是购买商品是从客户那收集,会有商品被重复购买

    --BAD
    SELECT DISTINCT t1.column_name
    FROM table_name1 t1, table_name2 t2
    WHERE t1.column_name = t2.column_name;
    --GOOD
    SELECT column_name
    FROM table_name1 outer
    WHERE EXISTS
      (SELECT 1
      FROM table_name2 inner
      WHERE inner.column_name = outer.column_name)
    ;
  • 相关阅读:
    Python入门11 —— 基本数据类型的操作
    Win10安装7 —— 系统的优化
    Win10安装6 —— 系统的激活
    Win10安装5 —— 系统安装步骤
    Win10安装4 —— 通过BIOS进入PE
    Win10安装2 —— 版本的选择与下载
    Win10安装1 —— 引言与目录
    Win10安装3 —— U盘启动工具安装
    虚拟机 —— VMware Workstation15安装教程
    Python入门10 —— for循环
  • 原文地址:https://www.cnblogs.com/Azhu/p/2454206.html
Copyright © 2011-2022 走看看