大家都知道,“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;