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

請問Sql 的語法的問題

 
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-29 14:50:51 IP:211.74.xxx.xxx 未訂閱
語法如下 select CS01,CS02,C07,CS03,CS04,CS05,CS07,CS08,CS09 , CS10,c.CS03, c.CS04 ,c.CS09 from cs221 LEFT OUTER JOIN cs222 as c ON(CS01 = c.CS01),cs51 where Cs02=c02 and Cs02 >=:MEM1 and Cs02 <=:MEM2 and Cs03 >=:DAY1 and Cs03 <=:DAY2 and Cs01>=:NO1 and Cs01 <=:NO2 order by Cs02 其中 Cs221為 1200筆 Cs222為3500筆 C51為 30000筆 請問為何Query1.open須數分鐘時間才open成功 請問是何原因,如何改善?? 資料庫為.dbf
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-29 15:23:01 IP:211.20.xxx.xxx 未訂閱
OUTER JOIN 一般來說是加乘即A OUTER JOIN B,則筆數會是A筆數*B筆數 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-07-29 16:20:58 IP:211.74.xxx.xxx 未訂閱
引言: OUTER JOIN 一般來說是加乘即A OUTER JOIN B,則筆數會是A筆數*B筆數 @@~~飛翔在天際的精靈~~@@
可是若不用OUTER JOIN 其一樣要數分鐘,關鍵是不是CS51?? 因為要帶名稱所以必須 join Cs51 因cs51有近3萬筆是否影響很大?? 應如何處理??
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-30 09:48:29 IP:203.204.xxx.xxx 未訂閱
引言: OUTER JOIN 一般來說是加乘即A OUTER JOIN B,則筆數會是A筆數*B筆數 @@~~飛翔在天際的精靈~~@@
andersonhsieh 兄: 你好像說錯了,Outer Join是以其中一個資料表為準列出資料,不然他那個On的條件是做什麼用的,只有在Join的時候沒有給兩個Table關聯條件才是乘積,你可找資料比較少的Table試試,在資料庫課程中還有其他運算,據書上所言關聯式資料庫的查詢是運用數學的...(忘了名稱{想起來了是集合SET},還有公式可推導)
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
發表人 - jieshu 於 2002/07/30 10:04:10
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-30 09:53:31 IP:203.204.xxx.xxx 未訂閱
引言: 語法如下 select CS01,CS02,C07,CS03,CS04,CS05,CS07,CS08,CS09 , CS10,c.CS03, c.CS04 ,c.CS09 from cs221 LEFT OUTER JOIN cs222 as c ON(CS01 = c.CS01),cs51 where Cs02=c02 and Cs02 >=:MEM1 and Cs02 <=:MEM2 and Cs03 >=:DAY1 and Cs03 <=:DAY2 and Cs01>=:NO1 and Cs01 <=:NO2 order by Cs02 其中 Cs221為 1200筆 Cs222為3500筆 C51為 30000筆 請問為何Query1.open須數分鐘時間才open成功 請問是何原因,如何改善?? 資料庫為.dbf
應該如andersonhsieh兄所言,沒有做好Join導致得到的結果是乘積,所以資料量多速度也就慢了,你可列出3個Table的PK,讓網友幫你組看看。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-30 11:21:19 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 語法如下 select CS01,CS02,C07,CS03,CS04,CS05,CS07,CS08,CS09 , CS10,c.CS03, c.CS04 ,c.CS09 from cs221 LEFT OUTER JOIN cs222 as c ON(CS01 = c.CS01),cs51 where Cs02=c02 and Cs02 >=:MEM1 and Cs02 <=:MEM2 and Cs03 >=:DAY1 and Cs03 <=:DAY2 and Cs01>=:NO1 and Cs01 <=:NO2 order by Cs02 其中 Cs221為 1200筆 Cs222為3500筆 C51為 30000筆 請問為何Query1.open須數分鐘時間才open成功 請問是何原因,如何改善?? 資料庫為.dbf
應該如andersonhsieh兄所言,沒有做好Join導致得到的結果是乘積,所以資料量多速度也就慢了,你可列出3個Table的PK,讓網友幫你組看看。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
我不太懂'沒有做好Join'的意思 其欄位有做索引檔 Cs221==>CS01 Cs222==>CS01 CS51 ==>C02 且語法修改為如下,其速度未改善?? select CS01,CS02,C07,CS03,CS04,CS05,CS07,CS08,CS09 , CS10,c.CS03, c.CS04 ,c.CS09 from cs221,cs222,cs51 where Cs02=c02 and CS01 = c.CS01 and Cs02 >=:MEM1 and Cs02 <=:MEM2 and Cs03 >=:DAY1 and Cs03 <=:DAY2 and Cs01>=:NO1 and Cs01 <=:NO2 order by Cs02
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-30 11:30:22 IP:211.20.xxx.xxx 未訂閱
你的cs221和cs51沒有key值join所以會產生cs221筆數*cs51筆數 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-07-30 11:31:48 IP:61.218.xxx.xxx 未訂閱
你是採用 MSSQL 嗎 ? 如果是的話 ,在 Query Analyze 下查看一下執行計劃 , 應該就可以知道哪裡比較慢了
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-07-30 13:48:25 IP:211.74.xxx.xxx 未訂閱
引言: 你的cs221和cs51沒有key值join所以會產生cs221筆數*cs51筆數 @@~~飛翔在天際的精靈~~@@
其有key 值join ==>Cs221.CS02=Cs51.C02 Cs221.Cs01=Cs222.Cs01 資料庫是.dbf
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-07-30 14:29:00 IP:211.20.xxx.xxx 未訂閱
key 值join 改成這樣試試看看==>Cs51.C02=Cs221.CS02 Cs222.Cs01=Cs221.Cs01 還有KEY值JOIN要放到所有的WHERE的最後,所有的WHERE條件一定要有用到INDEX這樣才會快 發表人 - andersonhsieh 於 2002/07/30 14:31:01
------
@@~~飛翔在天際的精靈~~@@
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-07-30 14:56:45 IP:203.204.xxx.xxx 未訂閱
引言: 其有key 值join ==>Cs221.CS02=Cs51.C02 Cs221.Cs01=Cs222.Cs01 資料庫是.dbf
有沒有Join正確,看資料量即可得知,如果資料筆數正確,還是很慢的話,就要看索引有沒有建好,程式有沒有做其他的控制。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-07-30 15:00:19 IP:211.74.xxx.xxx 未訂閱
引言: key 值join 改成這樣試試看看==>Cs51.C02=Cs221.CS02 Cs222.Cs01=Cs221.Cs01 還有KEY值JOIN要放到所有的WHERE的最後,所有的WHERE條件一定要有用到INDEX這樣才會快 發表人 - andersonhsieh 於 2002/07/30 14:31:01
請問WHERE條件用到INDEX 其是否要用復合KEY(Field1 Field2 Field3) ,或只要用單KEY
系統時間:2024-05-04 3:54:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!