VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

內部網,多個用戶同時寫入資料表,速度很慢,請指點

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
xjliaos



註冊時間: 2007-11-20
文章: 87
來自: guan dong

第 1 樓

發表發表於: 星期三 九月 01, 2010 3:38 pm    文章主題: 內部網,多個用戶同時寫入資料表,速度很慢,請指點 引言回覆

代碼如下:
SELE 4
GO TOP
DO WHILE NOT EOF()
MODEL_1 = MODEL_NO
WEEK_DATE_1 = WEEK_DATE
SELE 1
LOCA FOR MODEL_NO=MODEL_1
IF FOUND()
REPL;
WEEK_DATE WITH WEEK_DATE_1,;
ENDIF
SELE 4
SKIP
ENDDO
MESSAGEBOX("資料保存成功! ",64,"完成...")

************************************************
以上代碼在運行過程中,多個用戶同時保存速度很慢(2千條記錄),應該怎么修改!!
回頂端
檢視會員個人資料 發送私人訊息
saint



註冊時間: 2003-07-14
文章: 211


第 2 樓

發表發表於: 星期三 九月 01, 2010 5:30 pm    文章主題: 引言回覆

試一下 update sql staement
UPDATE SELE1_ALIAS_NAME SET WEEK_DATE = WEEK_DATE_1
WHERE MODEL_NO=MODEL_1
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 3 樓

發表發表於: 星期三 九月 01, 2010 5:32 pm    文章主題: 引言回覆

select 4 和 select 1
有沒有開索引檔?
若有的話,2千條記錄,應該在1秒內能完成才對
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
andywilliams



註冊時間: 2004-10-23
文章: 111


第 4 樓

發表發表於: 星期三 九月 01, 2010 11:43 pm    文章主題: 引言回覆

開索引檔+Seek 替代 Locate
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
saint



註冊時間: 2003-07-14
文章: 211


第 5 樓

發表發表於: 星期四 九月 02, 2010 11:22 am    文章主題: 引言回覆

嗯~可以用SEEK 來它是一個好主意
但是,我覺得應該在這一個時刻起,把XBASE 的語法給忘了,而直接改用 SQL STATEMENT 來代替
因為在其它工具中沒有這樣的指令,都是要用SQL 來完成。
而且你用久了..你不覺得SQL 很直觀嗎? 那麼多的指令只是為了要做一個更新動作,何不直接下一道UPDATE 就讓它完成呢?


saint 在 星期四 九月 02, 2010 5:07 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
xjliaos



註冊時間: 2007-11-20
文章: 87
來自: guan dong

第 6 樓

發表發表於: 星期四 九月 02, 2010 4:11 pm    文章主題: 引言回覆

ckp6250 寫到:
select 4 和 select 1
有沒有開索引檔?
若有的話,2千條記錄,應該在1秒內能完成才對



沒有做索引,現在問題是一個用戶用速度很快,多個用戶同時保存才慢.
回頂端
檢視會員個人資料 發送私人訊息
xjliaos



註冊時間: 2007-11-20
文章: 87
來自: guan dong

第 7 樓

發表發表於: 星期四 九月 02, 2010 4:15 pm    文章主題: 引言回覆

saint 寫到:
嗯~可以用SEEK 來它是一個好主意
但是,我覺得應該在這一個時刻起,把XBASE 的語法給忘了,而支接改用 SQL STATEMENT 來代替
因為在其它工具中沒有這樣的指令,都是要用SQL 來完成。
而且你用久了..你不覺得SQL 很直觀嗎? 那麼多的指令只是為了要做一個更新動動,何不直接下一道UPDATE 就讓它完成呢?


你提醒了我,非常感謝您的建議!
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 8 樓

發表發表於: 星期四 九月 02, 2010 5:53 pm    文章主題: 引言回覆

基本上 locate 也可以由 rushmore 得到一點好處,
不過,四樓比較對,改用index seek比較好.

如果是對一個index的欄位 與要搜尋的欄位不一樣的檔案做update時,
vfp 對自動建立一個臨時的index,
當然這樣會比純locate要快,
但因為多了建立臨時index的時間,
所以比index seek要慢一點.

結論:
用update 還是比較簡單,可讀性比較高,
多出來的時間,就用金錢+raid+多到爆炸的記憶體+n核心cpu+光纖網路來彌補就可以了.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
richshih



註冊時間: 2007-10-11
文章: 153


第 9 樓

發表發表於: 星期五 九月 03, 2010 1:22 pm    文章主題: 引言回覆

syntech 先進 以你的觀點 1)或 2) 較快
1)
use dbf
indexseek()
replace
2)
update
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 10 樓

發表發表於: 星期五 九月 03, 2010 3:00 pm    文章主題: 引言回覆

也許你要問,
多慢的機器可以看出差別.
或者是要處理多少資料下可以看出差別.


VFP 是一個看起來像compiler方式執行,但是骨子裡卻是 Interpreter 方式執行的工具,
不像 delphi,c++ 是純粹必須以compiler編譯過才能執行.
所以問題就變成 update sql 會不會比傳統xbase 語法組合處理要好,

我的想法 update-sql 的處理較好,
因為傳統的xbase 命令,每個命令是獨立的,
並沒有一定是
代碼:

use dbf
indexseek()
replace

可能中間還有一大堆有的沒的的命令,
導致每個命令還是必須完整跑一次直譯的流程,
無法做到所謂"最佳化",

而SQL 命令就可以處理成最佳化的情況,


但是這裡面還是有一個陷阱,
可不可以寫一個XBASE 命令組合,而執行效率是比SQL命令為佳的,
我認為也是辦得到的,
只能寫程式的人有沒有能力了解VFP是怎麼做每個命令的翻譯,

另外的陷阱是,
如果你寫出很差的SQL 命令,也會比傳統的XBASE命令執行效率要差,
例如:
代碼:

select table1
scan
update table2 set f1 = n where table2.f2=table1.f2
endscan

其中,UPDATE命令必須每次都翻譯,當然就效率爛到極點.
(這種寫法在剛剛由XBASE轉成SQL思維處理時很常見. 我小時候也是. Laughing )


就像是理論上,利用Assembly language 可以寫出比COMPILER 更最佳化的執行檔,
但也同時可以寫出更糟的執行檔一樣.



這就是修為的問題了.而不是工具本身語法的優劣.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
ckp6250



註冊時間: 2004-07-30
文章: 1645


第 11 樓

發表發表於: 星期五 九月 03, 2010 9:42 pm    文章主題: 引言回覆

mysql 有這種語法,效率最高,可惜 VFP 好像沒有

UPDATE items,month SET items.price=month.price WHERE items.id=month.id

直接利用一個檔去更新另一個檔,帥!
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
fschern



註冊時間: 2003-10-12
文章: 34


第 12 樓

發表發表於: 星期日 九月 05, 2010 10:23 am    文章主題: 引言回覆

從樓主提供的程式範例中看不出所採用的記錄鎖定策略
也沒有看到有做記錄LOCK及UNLOCK的程序。
注意看看是否因為多人同時回寫同一筆記錄時,LOCK/UNLOCK程序未完備所造成的問題。
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作