sql 用'like'时速度慢 |
尚未結案
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 假設針對 table1 的 field1 有設定一個 Index select * from table1 where field1 like 'xxx%' --> 會啟動此 Index 並做 Range Scan select * from table1 where field1 like '%xxx%' --> 不會啟動此 Index,table1 做 Full Scan,且會逐筆比對 field 是否符合 '%xxx%' select * from table1 --> table1 做 Full Scan 而若 table1 無對 field1 設定 Index
select * from table1 where field1 like 'xxx%'
select * from table1 where field1 like '%xxx%'
select * from table1
皆會對 Table1 做 Full Scan,只是差在是否還須去作比對 PS:以上為以 Oracle 觀點來看,SQL Server 應該相去不遠,若有錯誤,尚請不吝指教 --------------------------------
小弟才疏學淺,若有謬誤請不吝指教
--------------------------------
------
Fishman |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
你是用ClientDataSet嗎?若不是的話,我建議你改用它
(ADOConnection-->ADOQuery-->DataSetProvider-->ClientDataSet)
然後ClientDataSet有Filter和Filtered的property
ClientDataSet1.Filter:='Edit1.text like ' '''' ª% '''';
//不知寫的對不對,自己測試;其他的DataSet如TQuery,TADOQuery
不能用 like 喔,自己看Help
ClientDataSet1.filtered:=true;
如此篩選都是在Client端的話,是使用記憶體,速度快上萬倍,你不妨試試看
切記一點,程式要寫的好,絕對不要在Sql Command上動腦筋,Sql越簡單越好
(如select ..from ... where ..order... ),所有的查詢,篩選都一定要在Client端執行,如此程式才能執行的順暢喔!
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
引言: 對不起,我要做一點修正,ClientDataSet用like好像不行必需用其他的方法 Example ClientDataSet1.Filter:='Field1 =' '''' '12*' ''''; //用* 代替like才可,這樣 TQuery ,TADOQuery 應該也可以用 ClientDataSet1.Filtered:=true; ClientDataSet1.Filtered:=false; 再次的建議,改用ClientDataSet會比較好johnny2212前辈: 感谢您的回应,可能我没说清楚,我用“LIKE”速度慢,主要是指直接在sql server上操作时的现象,不是指在delphi上操作,因此您的方法不知是否可行?Thank you very much! 谢谢! |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: luowy651,我想你誤解了 johnny2212 大大的意思 johnny2212 大大的意思應該是說,既然不用 like 功能就速度很快,那就在 SQL Server 上操作時避免使用該語法,亦即使用 select * from xx 的語法就可以了,然後在前端的 ClientDataSet 中,以 Filter 條件式來過濾顯示出來的資料 johnny2212 大大,不知這麼說是否正確 --------------------------------
小弟才疏學淺,若有謬誤請不吝指教
--------------------------------
------
Fishman |
orson
中階會員 發表:5 回覆:135 積分:58 註冊:2002-07-11 發送簡訊給我 |
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |