線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:628
推到 Plurk!
推到 Facebook!

請教簡化SQL

尚未結案
yy1981
一般會員


發表:1
回覆:0
積分:0
註冊:2005-02-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-03 10:24:16 IP:202.175.xxx.xxx 未訂閱
想請教各位, 以下SQL能夠簡化嗎, 因執行時真的很慢才能出到RESULT, 我的DATABASE是DBF, 謝謝賜教 SELECT DISTINCT C.BOOK_NO, A.CON_ID FROM SHIP20A AS A, SHIP31C AS C WHERE A.CON_ID IN (SELECT CON_ID FROM SHIP31C WHERE MANIF_NO="2005011722DB" AND BOOK_NO IN (SELECT BOOK_NO FROM SHIP31A WHERE MANIF_NO="2005011722DB" AND AGENT="T0334" AND WLFBL_NO IS NOT NULL) ) AND C.BOOK_NO IN ( SELECT BOOK_NO FROM SHIP31A WHERE MANIF_NO="2005011722DB" AND AGENT="T0334" AND WLFBL_NO IS NOT NULL) ORDER BY C.BOOK_NO
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-03 11:09:33 IP:210.65.xxx.xxx 未訂閱
Hi yy1981,    試看看這樣行不行(無實際測試過)
SELECT  DISTINCT 
        C.BOOK_NO,
        A.CON_ID
FROM    SHIP20A AS A, 
        SHIP31C AS C
WHERE   A.MANIF_NO = "2005011722DB"
AND     A.BOOK_NO IN   (SELECT  BOOK_NO
                        FROM    SHIP31A
                        WHERE   MANIF_NO = "2005011722DB"
                        AND     AGENT="T0334"
                        AND     WLFBL_NO IS NOT NULL)
AND     C.BOOK_NO IN   (SELECT  BOOK_NO
                        FROM    SHIP31A
                        WHERE   MANIF_NO="2005011722DB"
                        AND     AGENT="T0334"
                        AND     WLFBL_NO IS NOT NULL)
ORDER BY C.BOOK_NO
再者,考慮一下各個 Table 的 Index 問題 1.SHIP20A 對 MANIF_NO BOOK_NO 增加一組 Index 2.SHIP31C 對 BOOK_NO 增加一組 Index 2.SHIP31A 對 MANIF_NO AGENT 增加一組 Index PS:無 DBF 經驗,僅以所知資料庫提供意見,有錯誤怪! ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
julian
一般會員


發表:3
回覆:10
積分:7
註冊:2002-07-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-05 16:54:35 IP:203.74.xxx.xxx 未訂閱
declare @MANIF_NO varchar(20) declare @AGENT varchar(20) declare @book table (book_no varchar(20)) insert into @book select BOOK_NO from SHIP31A where MANIF_NO=@MANIF_NO and AGENT=@AGENT and WLFBL_NO is not NUL select distinct C.BOOK_NO, A.CON_ID from SHIP20A as A, SHIP31C as C where A.CON_ID in(select CON_ID from SHIP31C where MANIF_NO=@MANIF_NO and BOOK_NO in(kselect book_no from @boo) ) and C.BOOK_NO in(select book_no from @boo) order by C.BOOK_NO 不要重複select 一樣的東西 這樣可以提昇效率
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-10 00:56:05 IP:203.204.xxx.xxx 未訂閱
引言: 想請教各位, 以下SQL能夠簡化嗎, 因執行時真的很慢才能出到RESULT, 我的DATABASE是DBF, 謝謝賜教 SELECT DISTINCT C.BOOK_NO, A.CON_ID FROM SHIP20A AS A, SHIP31C AS C WHERE A.CON_ID IN (SELECT CON_ID FROM SHIP31C WHERE MANIF_NO="2005011722DB" AND BOOK_NO IN (SELECT BOOK_NO FROM SHIP31A WHERE MANIF_NO="2005011722DB" AND AGENT="T0334" AND WLFBL_NO IS NOT NULL) ) AND C.BOOK_NO IN ( SELECT BOOK_NO FROM SHIP31A WHERE MANIF_NO="2005011722DB" AND AGENT="T0334" AND WLFBL_NO IS NOT NULL) ORDER BY C.BOOK_NO
嗨! 有一件事想澄清一下, 因為你提到是使用dbf結構, 由於dbf並非結構化的client/server資料庫, 上面幾位的建議在標準的C/S確實可以拉高效能, 但必須要知道的是 DBF一旦被OPEN, 是會將全部記錄載入到本機中的BUFFER內, 所以當你要SELECT記錄前一定要OPEN, 因此你慢的是 OPEN的速度, 關鍵不在於你的SELECT 程式(如果沒有索引檔, 那將會更慢), 其實你可以試試看把資料庫減少然後同樣的條件去搜尋, 看看有沒有提昇速度(我想你的資料會因搜尋變慢, 應該至少有6000 筆記錄以上吧, 一般如果只有數百筆到近筆, 速度不致於降很多), 以上是我個人的經驗, 僅提供參考!!!!
系統時間:2024-06-18 22:12:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!