MS_SQL中使用Where條件的問題 |
尚未結案
|
Leonli
一般會員 發表:23 回覆:21 積分:18 註冊:2004-03-31 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ Where各條件的先后順序對SQL查詢的效率會有一定的影響﹐同您所述﹐如果a3的條件已經可以先排除掉資料庫中一半的記錄﹐在觀念上當然放在最前面要比放在最后要更有效率﹒ Select A.*, B.* From 資料表一 A, 資料表二 B Where A.鍵值欄位=B.鍵值欄位 and A.欄位1='Xinsheng'
Select A.*, B.* From 資料表一 A, 資料表二 B Where A.欄位1='Xinsheng' and A.鍵值欄位=B.鍵值欄位 從以上的兩句SQL敘述中﹐可以看出查詢的目的是一樣的﹐但前句比后句會更有效率﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
Leonli
一般會員 發表:23 回覆:21 積分:18 註冊:2004-03-31 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
scotthsiao
高階會員 發表:13 回覆:324 積分:147 註冊:2005-02-01 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
這個問題在每個資料庫的狀況都會有些許不同. 有些資料庫在處理 Client 的 Query 要求時, 會經過一個[查詢最佳化]的處理, 依據索引的設計結構與相關的統計紀錄, 來決定條件的處理順序. 不過也不是每個資料庫的最佳化功能都很強, 請閱讀該資料庫的相關文件, 另外統計資料也要有維護才會得到更好的效率. 雪龍
http://bestlong.no-ip.com/
學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
這個問題沒有絕對答案 如果 a1 濾掉剩下 3/4, a2 濾掉剩下 2/3, a3 濾掉剩下 1/2
您可以考慮將 a3 放最前面 但是前提是 a1, a2, a3 條件比對的時間相同 如果 a3 條件每比一次花時間是 a1 的 10 倍, 那 a1 放前面會比較好 *********************
如果您滿意答案,請結案
*********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
to leonil:
小弟淺見.個人認為,where條件的下法,對於執行效率是一定有影響的,至於那個條件在前或在後會有什麼影響,要看各家資料庫而定.像以Oracle來說,越後面的條件會越先執行(記得沒有錯的話,很久沒碰oracle了),不過原則上來說,儘量把primary key的條件用進去,如果where條件裡沒有用到PK欄位,那麼就自己再對自己join一次,通常速度會有提昇.
當然,最好的方式,是要學會看plan,看看資料庫到底有沒有去使用index還是full scan,這些在面對上百萬筆資料量時,會有很大的幫助的
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
以 MSSQL 來說 a1 a2 a3 的位置先後影響並不大, 哪一個條件先處理是經過一連串的公式與參數計算後才決定的. 因為資料是一定會持續的增加的, 今天 A3 條件可以過濾掉 1/2 的資料量, 可是過了一段時間不同的資料輸入, 會演變成 1/5 或 4/5 都有可能. 所以要靠資料庫內建的最佳化分析器配合系統內的統計資料來決定處理的先後. 不然怎麼會有資料庫管理員的需求產生呢? 雪龍
http://bestlong.no-ip.com/
學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
Arlung Miao
初階會員 發表:9 回覆:44 積分:25 註冊:2004-08-25 發送簡訊給我 |
我在公司的一個測試庫上做了測試(MS-SQL 2000 / 6000K記錄),結論是經過SQL Server優化後,他們的Execution Plan 是一致的。所以,我認爲無論欄位放在前面或者後面對速度沒有影響(在MS-SQL中)。 When the statement reaches the server, Microsoft® SQL Server™ 2000 compiles it into an execution plan and then immediately runs the execution plan. 發表人 - Arlung Miao 於 2005/05/12 10:20:59
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
引言: 以 MSSQL 來說 a1 a2 a3 的位置先後影響並不大, 哪一個條件先處理是經過一連串的公式與參數計算後才決定的.要補充一下, 這裡所說的 MSSQL 是指 MSSQL2000 的版本. 該版本有附上一個 SQL Query Analyzer 可以開啟功能表下的 [顯示執行計畫],[顯示用戶端統計資料] 然後執行 SQL Query 後會顯示有趣的內容可以研究. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |