熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

使CREATETABLEASSELECT能支持ORDERBY

2013-11-13 22:24:14  來源: Oracle 

  大家都知道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會有大量的重復記錄出現

From:http://tw.wingwit.com/Article/program/Oracle/201311/18998.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.