2009年2月21日

快速製作大量資料的資料表

碎碎念改了新版面囉
大家感覺這樣的配色如何呢?

這次要來講一個謎樣的 SQL 語法:Insert Into Table1 Select * From Table2
意思是:從 Table2取出資料後,通通塞進Table1
不過有個限制就是:兩邊欄位數量、順位、類型必須相符

好了,坎尼利用了這個特性來講如何快速的製作測試大量資料表

首先,先新增一個資料表
範例裡只有兩個欄位,且 oid 的類型是 identity

在 Table 裡加入一筆資料

接著打開指令輸入視窗
不過要注意的是,坎尼將 oid 設 identity
若是強制 Insert 到 identity 欄位,Sql Server 只會說:No, you can't.

所以指令會改成下圖中第二句
可以看到坎尼用的偷吃步就是:目的來源的資料表為同一個

由於一開始只有1筆,所以畫面上只會 Insert 一筆
「一筆有什麼好了不起的?」也許Tim會這麼講
不過當坎尼按了十數次的執行語法後

可以發現,資料已經成長到十數萬筆
原因就是:由於是同一資料表,所以每做一次就成長一倍
換言之,也就是2的N次方

以這種速度按下去,再按個幾次就會有千萬筆的資料了!!!!

可是當資料成長的愈快,每次執行的速度也就愈久
所以坎尼又改了一下語法 (如下圖)

一次只取 5000 速度只有快!!! 天下武功,唯快不破
「如果要三千萬的資料,啊你是要我按到手斷掉啊」Tim又開口了
『孩子,請照顧好自己的身體健康,寫個for迴圈來跑就好』

最後來看一下前面做了那些動作的成果

See? 坎尼只是邊看電視邊按執行鍵,資料輕輕鬆鬆的成長到十萬筆 XDD

要是需要大量的資料來測試自己系統執行效率
就可以試試坎尼這個方法 :p
坎尼當年就被要求要一千萬筆資料來做壓力測試 orz

備註:
這個語法坎尼只在 MS Sql Server 裡用過
不過 Google 大神好像講說其他資料庫也能這麼做
這點坎尼目前的機器上沒法驗證,有需求的人就試試看吧 :D

2 則留言:

Unknown 提到...

..... 今天見識到了好可怕的砍尼蛔蟲。不過這樣產生的資料內容應該會一直重複吧?如果要產生差異性夠大的資料,可能還是要寫程式來跑比較有用:p(當然在維護過程中持續把客戶的實際資料拿回來測試是最理想的) 畢竟根據資料內容的不同,SQL/Table Schema 是會有不同的調整方法的~

坎尼 提到...

若要有不同的資料,請善用 substr 和 + 運算子
把流水號加到範例中的 oname上

對了,記得轉型

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D