menghang 发表于 2011-3-4 13:35:58

count(*)
比count(1)稍快

当然如果可以通过索引检索,对索引列的计数仍旧是最快的。
例如 COUNT(EMPNO)

menghang 发表于 2011-3-4 13:38:23

用Where子句替换HAVING子句

 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤。 这个处理需要排序,总计等操作。 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

    例如:

 低效:

   SELECT REGION,AVG(LOG_SIZE)
   FROM LOCATION
   GROUP BY REGION
   HAVING REGION REGION != ‘SYDNEY’
   AND REGION != ‘PERTH’
 高效

   SELECT REGION,AVG(LOG_SIZE)
   FROM LOCATION
   WHERE REGION REGION != ‘SYDNEY’
   AND REGION != ‘PERTH’
   GROUP BY REGION
(HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等。 除此而外,一般的条件应该写在WHERE子句中)

menghang 发表于 2011-3-4 13:39:48

减少对表的查询

 在含有子查询的SQL语句中,要特别注意减少对表的查询。

    例如:

 低效

          SELECT TAB_NAME
          FROM TABLES
          WHERE TAB_NAME = ( SELECT TAB_NAME
                              FROM TAB_COLUMNS
                              WHERE VERSION = 604)
          AND DB_VER= ( SELECT DB_VER
                           FROM TAB_COLUMNS
                           WHERE VERSION = 604)

高效

          SELECT TAB_NAME
          FROM TABLES
          WHERE (TAB_NAME,DB_VER)
= ( SELECT TAB_NAME,DB_VER)
                   FROM TAB_COLUMNS
                   WHERE VERSION = 604)
    Update 多个Column 例子:

 低效:

         UPDATE EMP
         SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
            SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
         WHERE EMP_DEPT = 0020;
 高效:

          UPDATE EMP
          SET (EMP_CAT, SAL_RANGE)
          = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
          FROM EMP_CATEGORIES)
         WHERE EMP_DEPT = 0020;

menghang 发表于 2011-3-4 13:44:55

用IN来替换OR

    下面的查询可以被更有效率的语句替换:

    低效:

    SELECT…
    FROM LOCATION
 WHERE LOC_ID = 10
 OR   LOC_ID = 20
 OR   LOC_ID = 30

    高效:

 SELECT…
    FROM LOCATION
 WHERE LOC_IN IN
(10,20,30);

    按:这是一条简单易记的规则,但是实际的执行效果还须检验,在ORACLE8i下,两者的执行路径似乎是相同的。

conquerme 发表于 2011-8-7 09:20:17

3x

qianshi 发表于 2011-8-16 16:04:53

收藏了

stone-石头 发表于 2011-12-9 16:07:26

3ks,无私啊:lol

zm5819 发表于 2011-12-12 21:25:53

不错顶

model_model 发表于 2011-12-16 16:13:07

下载了~谢谢

jaa104 发表于 2012-1-4 11:10:54

感谢 楼主分享

928930885 发表于 2012-2-1 17:19:16

:handshake
页: 1 2 3 [4]
查看完整版本: oracle10g基础教程(第二版)ppt