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

有沒有 像 vs 一樣的 dataset 模式的虛擬 資料表
前往頁面 上一頁  1, 2, 3  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
amd



註冊時間: 2003-07-20
文章: 54


第 16 樓

發表發表於: 星期一 七月 14, 2014 8:54 pm    文章主題: 引言回覆

剛才 用 select 先查 3個表在記憶体,再從記憶体配對果然速度跟查 dbf 一樣∼

amd 在 星期一 七月 14, 2014 9:08 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息
amd



註冊時間: 2003-07-20
文章: 54


第 17 樓

發表發表於: 星期一 七月 14, 2014 9:08 pm    文章主題: 引言回覆

40萬筆的dbf, 以vfp來講,是小兒科

*******

我這個 select 內的 iif 條件 一堆,因為要判斷 訊息出來∼

其中一個 iif 差不多有 500 個字, 判斷快要 100 個條件,最後再 as 訊號

很操 程式的,其它的差不多也要 10 個條件!

******************
剛才把 iif 刪到只剩一個,速度也差不多,可能 cpu 不夠力,我還在用 2 核心而已∼
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



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


第 18 樓

發表發表於: 星期一 七月 14, 2014 9:28 pm    文章主題: 引言回覆

Select 的 where 條件順序很重要
比如底下二句,答案一樣、但耗掉的時間很可能差很大

select * from 全台人口 where 身份證字號='E' and 年齡=30 and 已婚=.T.


Select * from ((Select * from (Select * from 全台人口 where 已婚=.T.) a Where 年齡=30) b ) c where 身份證字號='E'

以條件比對而言、比對 .T. 或 .F. 速度最快、比對數字則次之,比對文字最慢
同樣的資料量、不同的比對順序,效能有差

amd 寫到:

其中一個 iif 差不多有 500 個字, 判斷快要 100 個條件,最後再 as 訊號


iif太多的話,試著改用icase , 仍然要注意順序問題

索引檔建的好,條件下的妙,100個條件也不算什麼,
說不定第一個條件就去掉一大半了

套句三國演義:百萬軍中,取上將之首,如探囊取物。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
amd



註冊時間: 2003-07-20
文章: 54


第 19 樓

發表發表於: 星期一 七月 14, 2014 9:55 pm    文章主題: 引言回覆

ckp6250 寫到:
Select 的 where 條件順序很重要
比如底下二句,答案一樣、但耗掉的時間很可能差很大

select * from 全台人口 where 身份證字號='E' and 年齡=30 and 已婚=.T.


Select * from ((Select * from (Select * from 全台人口 where 已婚=.T.) a Where 年齡=30) b ) c where 身份證字號='E'

以條件比對而言、比對 .T. 或 .F. 速度最快、比對數字則次之,比對文字最慢
同樣的資料量、不同的比對順序,效能有差

amd 寫到:

其中一個 iif 差不多有 500 個字, 判斷快要 100 個條件,最後再 as 訊號


iif太多的話,試著改用icase , 仍然要注意順序問題

索引檔建的好,條件下的妙,100個條件也不算什麼,
說不定第一個條件就去掉一大半了

套句三國演義:百萬軍中,取上將之首,如探囊取物。


********************
大大 ,我的 where 倒是簡單得可以,只判斷 a.名稱 = b.名稱

原來 select 也有 icase 可以用,foxpro 果然還有我不知的技術∼

不過看了本版說 "D" 會出問題,先讓過∼

不過我沒設 索引檔 說,記得之前看書說,foxpro 很聰明,select 時會自己先建立,然後再查∼

不建 索引檔 ,是因為如果程式發生錯誤就很麻煩,因為有時下載會失敗,程式不正常關閉會造成 dbf 打開失敗,這是 foxpro 最大的缺點了∼

******
試了 建立 索引檔 ,速度一樣∼

*******

============

再請問 各位 大大 一個 問題∼

假如

a表 資料
1 ( 1天
2 ( 2天
3 ( 3天
4 ( 4天
5 ( 5天
6 ( 6天
-7 ( 7天
8 ( 8天
9 ( 9天
.............

那我要如何下只有 select 連三次都是 正的 才顯示出來∼

也就是 在 3 ~ 6 的時候 select 時,就會出現∼

但在 9 時不會出現,因為 7是 - 的 ∼

謝謝∼


amd 在 星期一 七月 14, 2014 10:02 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息
yctsai



註冊時間: 2003-04-11
文章: 179


第 20 樓

發表發表於: 星期一 七月 14, 2014 9:56 pm    文章主題: 引言回覆

abc表,弄到陣列去處理,不知可否?
回頂端
檢視會員個人資料 發送私人訊息
amd



註冊時間: 2003-07-20
文章: 54


第 21 樓

發表發表於: 星期一 七月 14, 2014 10:05 pm    文章主題: 引言回覆

yctsai 寫到:
abc表,弄到陣列去處理,不知可否?


陣列 小弟 也不會用說,看書都跳過∼哈哈哈

感覺它對我好像不太重要,如果一次要塞 40 萬筆資料,可能會瘋吧∼

再過 十年,可能會變成 幾千萬筆
回頂端
檢視會員個人資料 發送私人訊息
syntech



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

第 22 樓

發表發表於: 星期一 七月 14, 2014 10:24 pm    文章主題: 引言回覆

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

請聯絡我們,也許我們幫得上忙


syntech 在 星期一 七月 14, 2014 10:30 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



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

第 23 樓

發表發表於: 星期一 七月 14, 2014 10:27 pm    文章主題: 引言回覆

amd 寫到:
可能 cpu 不夠力,我還在用 2 核心而已∼



還好 VFP 與幾核心較無關係,
與單一核心的運算能力較有關.

用工作管理員看就知道了.

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

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



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


第 24 樓

發表發表於: 星期一 七月 14, 2014 10:41 pm    文章主題: 引言回覆

可以參考這個文章
Performance Tuning Tips in Microsoft Visual FoxPro
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
ckp6250



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


第 25 樓

發表發表於: 星期一 七月 14, 2014 11:53 pm    文章主題: 引言回覆

一行指令就搞定了
代碼:

Select d.Date From (;
   Select a.Date,Iif(a.mount>0,1,0)+;
   (Select Iif(mount>0,1,0) From c:\123 b Where a.Date=b.Date+1)+;
   (Select Iif(mount>0,1,0) From c:\123 c Where a.Date=c.Date+2) As Total;
   FROM c:\123 a ) d ;
   WHERE d.Total=3
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
amd



註冊時間: 2003-07-20
文章: 54


第 26 樓

發表發表於: 星期二 七月 15, 2014 12:33 am    文章主題: 引言回覆

ckp6250 寫到:
一行指令就搞定了
代碼:

Select d.Date From (;
   Select a.Date,Iif(a.mount>0,1,0)+;
   (Select Iif(mount>0,1,0) From c:\123 b Where a.Date=b.Date+1)+;
   (Select Iif(mount>0,1,0) From c:\123 c Where a.Date=c.Date+2) As Total;
   FROM c:\123 a ) d ;
   WHERE d.Total=3


這種 select 小弟真是開眼界, from 後面還可以接 select 其它 資料表,
大都是 Select *;
From dbf ;
Into cursor 暫存檔

ckp6250 大大的 sql 功力很高深哦∼
小弟 功力很淺,可否請大大 大概講解一下,謝 謝!

不過 小弟想要做的是在 同一表的 判斷 3 次 + 的 ∼謝謝!

不知是否是用 top 3 再加上 排序
回頂端
檢視會員個人資料 發送私人訊息
yctsai



註冊時間: 2003-04-11
文章: 179


第 27 樓

發表發表於: 星期二 七月 15, 2014 9:10 am    文章主題: 引言回覆

正向思考有時很花腦筋的,我會考慮只要出現負的,那前後2筆去除,剩下就是答案
回頂端
檢視會員個人資料 發送私人訊息
ckp6250



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


第 28 樓

發表發表於: 星期二 七月 15, 2014 10:48 am    文章主題: 引言回覆

amd 寫到:

不過 小弟想要做的是在 同一表的 判斷 3 次 + 的 ∼謝謝!


這行 select 用的就是同一個表呀 c:\123

其次,不要急著聽解釋,先好好看看它的語法及用意。

再則,這行語法還可以再加速,留給您啦。(我在18樓有提示)
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
ckp6250



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


第 29 樓

發表發表於: 星期二 七月 15, 2014 10:58 am    文章主題: 引言回覆

yctsai 寫到:
我會考慮只要出現負的,那前後2筆去除,剩下就是答案


這恐怕會有問題,如此例 , 第7天是負的,若您去除前後2筆,那麼,6和8也會被去除
但,6是符合連續3天正數的(4,5,6都是正的)

此法不妥
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
ckp6250



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


第 30 樓

發表發表於: 星期二 七月 15, 2014 11:04 am    文章主題: 引言回覆

觀察至此,對樓主做個小結
1.幾百萬筆的 dbf 若是在本機執行 select 而嫌慢,不用懷疑,是程式師的問題,不是vfp的問題

2.Ramdisk若沒有幫助,只有二個可能
 一.資料量太少或ramdisk太小,看不出差異
 二.沒有善用Ramdisk

3.索引和where請仔細研究,Select 效能均依此二者

4.不要怪罪 cpu 不夠力, 2 核心很夠了,我現在用的筆電還是12年前的

5. 24樓介紹的那篇文章,請用力讀
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2, 3  下一頁
2頁(共3頁)

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


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