大家都知道CREATE TABLE AS SELECT这个SQL命令并不支持ORDER BY但如果我们想增加一个表它存储的是已经排列过的一组数据这些数据来自一个现有表该怎么办呢? 哈哈可以通过先建立一个VIEW然后再CREATE是不是一个不错的想法看看下面的这篇文章对你或许有用 一般情况下对一个TABLE中的数据进行分类排序后有利于优化数据库的查询性能 例如你的应用程序需要频繁的执行一个查询 SELECT * FROM EMP WHERE NAME LIKE M% 如果EMP表中的所有行都被他们的的名字排了序那么你的查询将会有显着提高因为NAME中所有包含M的行都被存储在了一起ORACLE在查询数据时仅仅从表中取得很少的DATA BLOCKS当然如果你的TABLE中的数据是静态的那么这个很好办到即在你CREATE TABLE时按照顺序INSERT即可但是往往我们的TABLE中的数据时常要更新而SQL又不支持带ORDER BY 字句的INSERT INTO SELECT FROM 和CREATE TABLE AS SELECT FROM 命令于是只能放弃固有的排序了结果当数据达到十几万条记录时查询性能就显着的下降了如何处理这样的问题呢有两个解决的方法 这里提供一个方法通过GROUP BY操作来完成 CREATE VIEW EMPGROUP AS SELECT NAMEEMPIDHIREDATEROWNUM FROM EMP GROUP BY NAME EMPID HIREDATEROWNUM 然后用这个VIEW来增加一个TABLE CREATE TABLE SORTED_EMP AS SELECT NAME EMPID HIREDATE FROM EMPGROUP 注意 如果你使用ORACLE以上版本可以使用INLINE VIEW代替EMPGROUP VIEW 如果你建VIEW时忽略了ROWNUM那么由于使用了GROUP BY会有大量的重复记录出现 |