51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

楼主: flyingrainball
打印 上一主题 下一主题

oracle10g基础教程(第二版)ppt

[复制链接]

该用户从未签到

61#
发表于 2011-3-4 13:35:58 | 只看该作者
count*
count1)稍快

当然如果可以通过索引检索,对索引列的计数仍旧是最快的。
例如 COUNTEMPNO
回复 支持 反对

使用道具 举报

该用户从未签到

62#
发表于 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子句中)
回复 支持 反对

使用道具 举报

该用户从未签到

63#
发表于 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;
回复 支持 反对

使用道具 举报

该用户从未签到

64#
发表于 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下,两者的执行路径似乎是相同的。
回复 支持 反对

使用道具 举报

该用户从未签到

65#
发表于 2011-8-7 09:20:17 | 只看该作者
3x
回复 支持 反对

使用道具 举报

该用户从未签到

66#
发表于 2011-8-16 16:04:53 | 只看该作者
收藏了
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2016-4-28 05:52
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]测试营长

    67#
    发表于 2011-12-9 16:07:26 | 只看该作者
    3ks,无私啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    68#
    发表于 2011-12-12 21:25:53 | 只看该作者
    不错  顶
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    69#
    发表于 2011-12-16 16:13:07 | 只看该作者
    下载了~谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    70#
    发表于 2012-1-4 11:10:54 | 只看该作者
    感谢 楼主分享
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    71#
    发表于 2012-2-1 17:19:16 | 只看该作者
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-28 02:33 , Processed in 0.077515 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表