數(shù)據(jù)庫中使用createtable...asselect*語句要注意什么

這篇文章主要介紹數(shù)據(jù)庫中使用create table...as select *語句要注意什么,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供德清企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為德清眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

1、再做一些數(shù)據(jù)遷移時候,很多人會使用create table  as select * from table where id=-1的方式來年建立一摸一樣的表,但是這樣做有個很大的弊端,不能將原表中的default value也一同遷移過來。

2、  Using the CREATE TABLE ... AS SELECT ... command: This command will copy acrooss to the new table all the data,but the constraints triggers ,and so on will not be transferred to the new table.

        那些都是not null約束,其他的約束和trigger是帶不過來了,嚴(yán)格說來not null也是約束的一種,只不過教材上把它排除在外了吧。

慎用create table as select,一定要注意默認(rèn)值的問題

oraclecreate talbe as select數(shù)據(jù)庫遷移 

再做一些數(shù)據(jù)遷移時候,很多人會使用create table  as select * from table where id=-1的方式來年建立一摸一樣的表,但是這樣做有個很大的弊端,不能將原表中的default value也一同遷移過來,可以看下面的例子:

第一,新建一個表

-- Create table

create table table01

(

  id        number(16),

  add_date  date default sysdate,

  status    number(1),

  entp_code varchar2(200)

)

第二,使用create table table02 as

select * From table01 where id=-1

第三、看看兩個表的結(jié)構(gòu),會發(fā)現(xiàn)第二張表的defaule value沒有了,如下2圖,可以很明顯看出來,表02的add_date的默認(rèn)值得sysdate沒有了

table01的表結(jié)構(gòu)

數(shù)據(jù)庫中使用create table...as select *語句要注意什么

table02的表結(jié)構(gòu)

數(shù)據(jù)庫中使用create table...as select *語句要注意什么

Create table as select性能簡介:

在數(shù)據(jù)庫中移動數(shù)據(jù)最快的方法是將其從一個表移動到別一個表,而不是需要進(jìn)入操作系統(tǒng)將數(shù)據(jù)從一個表移動到別一個表,有一些常見的方法可用于提高數(shù)據(jù)遷移的性能:

1.             調(diào)整表的結(jié)構(gòu)(刪除索引和觸發(fā)器)

2.             在數(shù)據(jù)遷移期間禁用約束

3.             使用提示和選項來改進(jìn)事務(wù)性能

第一個技巧是調(diào)整表的結(jié)構(gòu),它涉及禁用目標(biāo)表上面的任何觸發(fā)器或索引。例如,如果在目標(biāo)表上有行級觸發(fā)器,則插入到表中的每一行都會執(zhí)行觸發(fā)器。如果可能的話,最好在數(shù)據(jù)插入之前將目標(biāo)表的觸發(fā)器禁用;如果應(yīng)該為每個插入的行執(zhí)行該觸發(fā)器,則可以在批量插入完成以后再創(chuàng)建此觸發(fā)器,而不應(yīng)該在批量插入期間每插入一條數(shù)據(jù)重復(fù)執(zhí)行觸發(fā)器。

除了禁用觸發(fā)器,應(yīng)該在啟動數(shù)據(jù)加載之前刪除目標(biāo)表上面的索引,然后在數(shù)據(jù)加載完畢后再重新創(chuàng)建索引。如果索引留在表上,ORACLE將在插入每一行時動態(tài)管理索引。

注意:刪除索引和禁用觸發(fā)器可以解決大多數(shù)數(shù)和大型表與表之間數(shù)據(jù)遷移中遇到的性能問題。

除了禁用索引,還要考慮到表上的約束。如果源數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫的表中,在將數(shù)據(jù)加載到目標(biāo)表之前,可以檢查該數(shù)據(jù)了解它的相關(guān)約束(例如外鍵或check約束),一旦加載數(shù)據(jù)完成就可以重新啟用這些約束。

如果以上選項無法提供適當(dāng)?shù)男阅?,就?yīng)該調(diào)查Oracle為數(shù)據(jù)遷移調(diào)整引入的選項。這些選項包括如下:

1.插入命令的APPPEND提示   類似于Direct  Path Loader,APPENED提示將數(shù)據(jù)塊加載到表中,從表的高水位線開始。使用APPENED提示可以增加空間利用率。

2.Nologging選項  如果正在執(zhí)行create  table as select 命令,使用nologing選項可避免在操作期間寫入重做日志文件。

3.并行選項   并行查詢使用多個進(jìn)程來完成一個任務(wù)。對于create  table as select命令,可并行化create table 部分和查詢部分。如果使用并行選項,則也應(yīng)該使用nologing選項,否則并行操作將不得不由于串行化寫入到聯(lián)機(jī)重做日志文件而等待。

在使用這些高級選項之前,應(yīng)該首先調(diào)查目標(biāo)表的結(jié)構(gòu),確保已經(jīng)避免前面提到的一些常見問題。

以上是“數(shù)據(jù)庫中使用create table...as select *語句要注意什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享文章:數(shù)據(jù)庫中使用createtable...asselect*語句要注意什么
分享地址:http://muchs.cn/article36/pdpjpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號電子商務(wù)、網(wǎng)站改版服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司