?
このドキュメントでは、 php中國語ネットマニュアル リリース
如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ? |
??????? 大家都知道,“CREATE TABLE AS SELECT”這個SQL命令并不支持“ORDER BY”,但如果我們想增加一個表,它存儲的是已經(jīng)排列過的一組數(shù)據(jù),這些數(shù)據(jù)來自一個現(xiàn)有表,該怎么辦呢? 哈哈,可以通過先建立一個VIEW,然后再CREATE,是不是一個不錯的想法,看看下面的這篇文章,對你或許有用。 一般情況下,對一個TABLE中的數(shù)據(jù)進(jìn)行分類排序后有利于優(yōu)化數(shù)據(jù)庫的查詢性能。 例如:你的應(yīng)用程序需要頻繁的執(zhí)行一個查詢 如果EMP表中的所有行都被他們的的名字排了序,那么你的查詢將會有顯著提高。因為NAME中所有包含‘M’的行都被存儲在了一起,ORACLE在查詢數(shù)據(jù)時僅僅從表中取得很少的DATA BLOCKS。當(dāng)然,如果你的TABLE中的數(shù)據(jù)是靜態(tài)的,那么這個很好辦到,即在你CREATE TABLE時按照順序INSERT即可。但是往往我們的TABLE中的數(shù)據(jù)時常要更新,而SQL又不支持帶ORDER BY 字句的INSERT INTO ... SELECT ... FROM ...和CREATE TABLE AS SELECT ... FROM ...命令,于是只能放棄固有的排序了,結(jié)果當(dāng)數(shù)據(jù)達(dá)到十幾萬條記錄時,查詢性能就顯著的下降了。如何處理這樣的問題呢,有兩個解決的方法。 這里提供一個方法,通過GROUP BY操作來完成。 CREATE VIEW EMPGROUP AS 然后用這個VIEW來增加一個TABLE CREATE TABLE SORTED_EMP AS SELECT NAME, EMPID, HIREDATE FROM EMPGROUP; 注意: 1、如果你使用ORACLE7.3以上版本,可以使用INLINE VIEW代替EMPGROUP VIEW。 2、如果你建VIEW時忽略了ROWNUM,那么由于使用了GROUP BY,會有大量的重復(fù)記錄出現(xiàn)。 |