經過各種測試,現將經驗總結如下:
ASE+SYB12.0 一個大表AAA 共一億多條記錄 21G(加索引的大小)
-->
方法是最快的,不過要更改server的一些參數,如果相應的參數沒有更改,就不一定了。
1,sp_poolconfig 'default data cache',"7G","16K","2K"
----建16K的7G大小的default cache
select into ,大部分的查詢(包括,全表掃瞄,使用聚集索引的範圍查詢, order by等)使用16K的I/O能獲得更好的性能。
[color=red]增加16K 緩存的大小,能明顯提高"select into"的速度![/color]
2,sp_configure 'max online engines,7
----Adaptive Server 聯機引擎的最大數,不能超過cpu數
sp_configure 'number of worker processes',7
---同步運行並行的組合查詢可使用的工作進程的最大數,小於等於「max online"數
sp_configure 'max parallel degree',7
---最大並行度,全服務器範圍每個查詢允許使用的工作進程的最大數目,小於等於「worker processes"數
sp_configure 'max scan parallel degree',7
--基於散列掃瞄的最大並行度,小於等於「worker processes"數
[color=red]以上參數提高並發度[/color]
3,sp_configure 'number of sort buffers',20000
---指定在排序時所用的2K緩衝區的數目。說明了有多少緩衝區可以用來存放輸入表的數據頁。
[color=red]創建一個很大的索引,而SQL Server上其他的操作又很少時,設置該參數可以提高create index 的性能。[/color]
調整以上參數後,採用select into到臨時表,drop原表,rename臨時表,建索引是比較快的。
比bcp快!bcp出來就慢,回去更慢!