上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 次修改 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 23 樓
|
發表於: 星期一 七月 14, 2014 10:27 pm 文章主題: |
|
|
amd 寫到: | 可能 cpu 不夠力,我還在用 2 核心而已∼ |
還好 VFP 與幾核心較無關係,
與單一核心的運算能力較有關.
用工作管理員看就知道了. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
saint
註冊時間: 2003-07-14 文章: 211
第 24 樓
|
|
回頂端 |
|
|
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樓介紹的那篇文章,請用力讀 |
|
回頂端 |
|
|
|