|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
smithjoe
註冊時間: 2015-06-30 文章: 27
第 1 樓
|
發表於: 星期一 十一月 30, 2015 4:18 pm 文章主題: 如何更快些update大量紀錄 |
|
|
您好:
我有個DBF有150萬筆紀錄(約1.5GB).....
當中我想update5000筆紀錄, 如下...
update salestran set cinput = '20151112' where sales_id = 'A7089321'
我copy了所有update statement個prg去update, 但每筆update需時1秒到133秒.十分費時
請問有更快方法嗎??
謝!! |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期一 十一月 30, 2015 4:31 pm 文章主題: |
|
|
這其實是一個很大的問題. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 441
第 3 樓
|
發表於: 星期一 十一月 30, 2015 4:39 pm 文章主題: |
|
|
加入 index (tag) 會快很多!
index on SALES_ID TAG YOUR_TAG1
SEEK 'A7089321'
DO WHILE !EOF() .AND. SALES_ID='A7089321'
REPL CINPUT WITH '20151112'
SKIP
ENDDO
ERASE TAG YOUR_TAG1 |
|
回頂端 |
|
|
smithjoe
註冊時間: 2015-06-30 文章: 27
第 4 樓
|
發表於: 星期一 十一月 30, 2015 4:41 pm 文章主題: |
|
|
可提示update 5000筆紀錄的寫法? |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 5 樓
|
發表於: 星期一 十一月 30, 2015 7:18 pm 文章主題: |
|
|
問題不大
改善硬體設備即可
以樓主這項簡單工作來說
我認為5-10秒內可完工
vfp處理150萬筆資料,輕鬆愉快 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 6 樓
|
發表於: 星期一 十一月 30, 2015 8:17 pm 文章主題: |
|
|
改用ssd硬碟
改用RAM disk 來跑
把資料檔案分拆
或以上皆是 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 7 樓
|
發表於: 星期二 十二月 01, 2015 9:03 am 文章主題: |
|
|
我很好奇,有一百五十萬筆資料
那麼改用
Replace all Cinput with '20151112' for sales_id='a7089321'
速度上有差異嗎? |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 8 樓
|
發表於: 星期二 十二月 01, 2015 9:10 am 文章主題: |
|
|
六樓可行, 但要加再上如下設定(設定在 config.fpw)
TMPFILES=GETENV("TEMP")
EDITWORK=GETENV("TEMP")
SORTWORK=GETENV("TEMP")
PROGWORK=GETENV("TEMP")
=SYS (3050, VAL(SYS (3050, 1, 0)) / 3)
把 windows 的 temp 設到 Ramdisk 上, 如虎添翼
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
三樓的程式可行, 但改進一點會加速很大
index on SALES_ID TAG YOUR_TAG1 for SALES_ID='A7089321'
REPL CINPUT WITH '20151112' next 5000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
結合3+6樓之改進建議, 我實測了一個142萬筆的資料
如樓主所需,更新其5000 筆資料
總計費時不足2秒
結論:
對於大資料量,要加速其效能
1、硬體很重要
2、設定很重要
3、程式碼很重要
ckp6250 在 星期二 十二月 01, 2015 10:49 am 作了第 2 次修改 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 9 樓
|
發表於: 星期二 十二月 01, 2015 10:08 am 文章主題: |
|
|
從dBase III,clipper,fox base,fox pro
資料庫的最大瓶頸一直都是在硬碟的I/O上
因此要是一個檔案大小有1.5 G
那麼無論是更動讀寫或是備份,對於硬碟都是很耗時間
我一般都會想去避免這樣的情況 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 10 樓
|
發表於: 星期二 十二月 01, 2015 11:02 am 文章主題: |
|
|
bx1166 寫到: | 從dBase III,clipper,fox base,fox pro
資料庫的最大瓶頸一直都是在硬碟的I/O上
因此要是一個檔案大小有1.5 G
那麼無論是更動讀寫或是備份,對於硬碟都是很耗時間
我一般都會想去避免這樣的情況 |
斧底抽薪在於此。
好在,時代不同了,於今
I7 + x64 + ssd + 32G Ram + Ramdisk
問題小很多。 |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 441
第 11 樓
|
發表於: 星期三 十二月 02, 2015 11:11 am 文章主題: 不要放ssd |
|
|
你的dbf很大,不建議放ssd
1.先不說SSD有寫入壽命,忽然閃一下電(沒UPS底下),SSD會來不急存檔,DBF及INDEX容易壞
2.如果要寫入時再COPY至SSD,UPDATE後再寫回磁碟,一來一往可能更耗時,若是多人網路版,更不準你這樣覆壓.
3.解決的方法不是買更快的電腦及SSD,應是改用SQL DATABASE,或加上INDEX!
4.當然:如果是一輩子只改這一次,當然可以COPY至SSD!,以上我是依:網路多人的進銷存系統執行時來考量! |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 12 樓
|
發表於: 星期三 十二月 02, 2015 12:46 pm 文章主題: |
|
|
我碰到過的
電腦放在二樓,倉儲管理系統,整個建築物是以鐵架鐡皮屋組成
隔壁倉庫在二樓卸了一個有些重量的貨品,震動影響了讀寫中的硬碟
一大部分的檔案就這樣毀了
給大家參考一下,碰到,踢到電腦都有可能發生類似意外 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 13 樓
|
發表於: 星期三 十二月 02, 2015 3:22 pm 文章主題: Re: 不要放ssd |
|
|
CPS0204 寫到: | 你的dbf很大,不建議放ssd
1.先不說SSD有寫入壽命,忽然閃一下電(沒UPS底下),SSD會來不急存檔,DBF及INDEX容易壞
2.如果要寫入時再COPY至SSD,UPDATE後再寫回磁碟,一來一往可能更耗時,若是多人網路版,更不準你這樣覆壓.
3.解決的方法不是買更快的電腦及SSD,應是改用SQL DATABASE,或加上INDEX!
4.當然:如果是一輩子只改這一次,當然可以COPY至SSD!,以上我是依:網路多人的進銷存系統執行時來考量! |
如果有這麼大的dbf,而不買ups 的話,那是自尋死路,根本不必討論其它了。
ssd當然也有風險,所以,完善的備份工作也很重要。
SQL DATABASE自然是最佳方案,但,既然資料能存到1.5G,可見這組程式應該使用很久了,要轉換成serve/client, 也不是三天二天的事。 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4214 來自: Taipei,Taiwan
第 14 樓
|
發表於: 星期三 十二月 02, 2015 5:13 pm 文章主題: |
|
|
ckp6250 寫到: |
好在,時代不同了,於今
I7 + x64 + ssd + 32G Ram + Ramdisk
問題小很多。 |
i7: 應該是說 "單一核心運算效能最高"的那種cpu. 講i7,有種"核心越多越好"的印象,但vfp不是多核心運作的開發工具.
x64 + ssd + 32G Ram : 這個還好, 可以找第三方的 file cache 工具,像是eBoostr 之類的,增加檔案處理速度.
Ramdisk: 臨時檔,cursor 會用到,但是要把 1.5Gdbf 通通先搬到ramdisk,再處理,這個時間也可能耗掉很多,所以上面說的第三方的 file cache 工具就有機會派上用場.以前用ramdisk 就還要把 temp 目錄 copy來ccopy去的. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|