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