請教簡化SQL |
尚未結案
|
yy1981
一般會員 發表:1 回覆:0 積分:0 註冊:2005-02-03 發送簡訊給我 |
想請教各位, 以下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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 想請教各位, 以下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 筆記錄以上吧, 一般如果只有數百筆到近筆, 速度不致於降很多), 以上是我個人的經驗, 僅提供參考!!!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |