大家都知道
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 NAME
EMPID
HIREDATE
ROWNUM FROM EMP
GROUP BY NAME
EMPID
HIREDATE
ROWNUM
然後用這個VIEW來增加一個TABLE
CREATE TABLE SORTED_EMP AS SELECT NAME
EMPID
HIREDATE FROM EMPGROUP
注意 如果你使用ORACLE
以上版本
可以使用INLINE VIEW代替EMPGROUP VIEW
如果你建VIEW時忽略了ROWNUM
那麼由於使用了GROUP BY
會有大量的重復記錄出現
From:http://tw.wingwit.com/Article/program/Oracle/201311/18998.html