Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY

 

Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY
文章发表:kehui  发表日期:2002-01-21  阅读次数:1103
 大家都知道,“CREATE TABLE AS SELECT”这个SQL命令并不支持“ORDER BY”,但如果我们想增加一个表,它存储的是已经排列过的一组数据,这些数据来自一个现有表,该怎么办呢? <br>哈哈,可以通过先建立一个VIEW,然后再CREATE,是不是一个不错的想法,看看下面的这篇文章,对你或许有用。

一般情况下,对一个TABLE中的数据进行分类排序后有利于优化数据库的查询性能。

例如:你的应用程序需要频繁的执行一个查询 <br>SELECT * FROM EMP WHERE NAME LIKE ‘M%’;

如果EMP表中的所有行都被他们的的名字排了序,那么你的查询将会有显著提高。因为NAME中所有包含‘M’的行都被存储在了一起,ORACLE在查询数据时仅仅从表中取得很少的DATA BLOCKS。当然,如果你的TABLE中的数据是静态的,那么这个很好办到,即在你CREATE TABLE时按照顺序INSERT即可。但是往往我们的TABLE中的数据时常要更新,而SQL又不支持带ORDER BY 字句的INSERT AS SELECTCREATE TABLE AS命令,于是只能放弃固有的排序了,结果当数据达到十几万条记录时,查询性能就显著的下降了。如何处理这样的问题呢,有两个解决的方法。

这里提供一个方法,通过GROUP BY操作来完成。

CREATE VIEW EMPGROUP AS <br>SELECT NAME,EMPID,HIREDATE,ROWNUM FROM EMP <br>GROUP BY NAME, EMPID, HIREDATE,ROWNUM;

然后用这个VIEW来增加一个TABLE

CREATE TABLE SORTED_EMP AS SELECT NAME, EMPID, HIREDATE FROM EMPGROUP;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值