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

SQL速度改善!!(幫忙~ 3Q~~~)

答題得分者是:T.J.B
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-20 17:10:50 IP:61.218.xxx.xxx 未訂閱
請教高手~ 我下了這個SQL 是從三個Table中要取出資料(一年份的資料約二十萬筆),但是需約10分鐘,請各位前輩能指導一下,SQL要怎麼下才能改進速度,謝謝!! select max(FODMTL_FODB05.INDATE), FOD_MATERIAL.PART_NO, FOD_MATERIAL.DESCRIPTION, FODP06.DESCRIPT, MAX(FODMTL_FODB05.PRICE), FODMTL_FODB05.QTY1 from FOD_MATERIAL, FODP06, FODMTL_FODB05 where FOD_MATERIAL.PART_NO=FODMTL_FODB05.PART_NO and FOD_MATERIAL.UNIT=FODP06.CODE and CODE like "U%" and FOD_MATERIAL.PART_NO >= "1100100" and FOD_MATERIAL.PART_NO <= "9900000" and FODMTL_FODB05.INDATE >= "2002/1/1" and FODMTL_FODB05.INDATE <= "2003/3/20" group by PART_NO order by FOD_MATERIAL.PART_NO
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-20 17:23:34 IP:210.202.xxx.xxx 未訂閱
您的資料表架構可能要列出來給大家參考 包括Index Primary的架構 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-20 17:31:48 IP:61.218.xxx.xxx 未訂閱
CREATE TABLE `FODMTL_FODB05` ( `TICKET_NO` varchar(60) default NULL, `SEQ` varchar(60) default NULL, `OPERATOR` varchar(60) default NULL, `MO_NUMBER` varchar(60) default NULL, `FR_STATION` varchar(60) default NULL, `TO_STATION` varchar(60) default NULL, `PART_NO` varchar(60) default NULL, `QTY1` decimal(14,4) default NULL, `QTY2` decimal(14,4) default NULL, `UPRICE` decimal(13,4) default NULL, `AMT` decimal(11,1) default NULL, `BOX` decimal(4,0) default NULL, `PRINT` decimal(2,0) default NULL, `REMARK` varchar(60) default NULL, `TYPE` varchar(60) default NULL, `TRANS` varchar(60) default NULL, `CURRENT_STOCK_QTY` decimal(13,3) default NULL, `INDATE` date default NULL, `COIN` varchar(60) default NULL, `ONWAY` decimal(11,3) default NULL, `RATE` decimal(9,4) default NULL, `POST` varchar(60) default NULL, `MEMO` varchar(60) default NULL, `REM_STOCK_QTY` decimal(13,3) default NULL, `ADJ_REASON` varchar(60) default NULL, `TRAN_AP` varchar(60) default NULL, `AMT_NTD` decimal(12,0) default NULL, `QTY3` decimal(13,4) default NULL, `STATUS` varchar(60) default NULL, `TAX` decimal(6,0) default NULL, `PRICE` decimal(13,4) default NULL, `DESCRIPTION` varchar(60) default NULL, `REM` varchar(60) default NULL, `BAT` varchar(60) default NULL, `SEQ1` varchar(60) default NULL, KEY `TICKET_NO` (`TICKET_NO`), KEY `PRICE` (`PRICE`), KEY `QTY1` (`QTY1`), KEY `DESCRIPTION` (`DESCRIPTION`), KEY `INDATE` (`INDATE`) ) TYPE=MyISAM; CREATE TABLE `FODP06` ( `CODE` varchar(30) default NULL, `DESCRIPT` varchar(30) default NULL ) TYPE=MyISAM; CREATE TABLE `FOD_MATERIAL` ( `PART_NO` varchar(60) default NULL, `DESCRIPTION` varchar(60) default NULL, `QTY` double default NULL, `SPEC` varchar(60) default NULL, `UNIT` varchar(60) default NULL, `UNIT_PRICE` double default NULL, `BOND` varchar(60) default NULL, `MATERIAL` varchar(60) default NULL, `ABC` varchar(60) default NULL, `DORI` varchar(60) default NULL, `LEADTM` double default NULL, `SAFTY_STOCK` double default NULL, `MACHCO` varchar(60) default NULL, `CANCEL` varchar(60) default NULL, `OUTDAY` varchar(60) default NULL, `INDAY` varchar(60) default NULL, `CHKDAY` varchar(60) default NULL, `BUILD` varchar(60) default NULL, `ORDSTK` double default NULL, `LOCATOR` varchar(60) default NULL, `ECONM` double default NULL, `LMONTH` double default NULL, `ENDCNT` double default NULL, `MI_` double default NULL, `MOUT` double default NULL, `MBAN` double default NULL, `MBAD` double default NULL, `MIQC` double default NULL, `ONWAY` double default NULL, `PS1` varchar(60) default NULL, `PS2` varchar(60) default NULL, `PS3` varchar(60) default NULL, `UP_DATE` varchar(60) default NULL, `P01` varchar(60) default NULL, `P02` varchar(60) default NULL, `P03` varchar(60) default NULL, `P04` varchar(60) default NULL, `LMONTH_M` double default NULL, `TUP` double default NULL, `USER_NO` varchar(60) default NULL, `TIM_` varchar(60) default NULL, `SYS_DATE` varchar(60) default NULL, `ESTM` double default NULL, `CONSUME` varchar(60) default NULL, `EQUIP` varchar(60) default NULL, `RT_QTY` double default NULL, `UPRICE` double default NULL, `L_IN_QTY` double default NULL, `L_OUT_QTY` double default NULL, `M_IN` double default NULL, `NTD` double default NULL, `CURCY` varchar(60) default NULL, `L2_OUT_QTY` double default NULL, `VER` varchar(60) default NULL, `BUYOFF_REP` varchar(60) default NULL, `ADJ_IN` double default NULL, `ADJ_OUT` double default NULL, `CHECK_YN` varchar(60) default NULL, `INV_LESS` varchar(60) default NULL, `BUYER_NO` varchar(60) default NULL, `VEND_NO` varchar(60) default NULL, `M_ADJ_IN` double default NULL, `M_ADJ_OUT` double default NULL, `L_ADJ_OUT` double default NULL, `L_ADJ_IN` double default NULL, `PS_MAT` varchar(60) default NULL, `NMONTH` double default NULL, `N2MONTH` double default NULL, `CLEAR_NO` varchar(60) default NULL ) TYPE=MyISAM;
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-20 17:40:48 IP:211.72.xxx.xxx 未訂閱
引言: select max(FODMTL_FODB05.INDATE), FOD_MATERIAL.PART_NO, FOD_MATERIAL.DESCRIPTION, FODP06.DESCRIPT, MAX(FODMTL_FODB05.PRICE), FODMTL_FODB05.QTY1 from FOD_MATERIAL, FODP06, FODMTL_FODB05 where FOD_MATERIAL.PART_NO=FODMTL_FODB05.PART_NO and FOD_MATERIAL.UNIT=FODP06.CODE and CODE like "U%" and FOD_MATERIAL.PART_NO >= "1100100" and FOD_MATERIAL.PART_NO <= "9900000" and FODMTL_FODB05.INDATE >= "2002/1/1" and FODMTL_FODB05.INDATE <= "2003/3/20" group by PART_NO order by FOD_MATERIAL.PART_NO
您可以試著將有Join到其他表格的條件寫在後面(依表格的資料數目由小而大排列)。 所以您的Where條件可以改寫為
where CODE like "U%" and 
      FOD_MATERIAL.PART_NO >= "1100100" and 
      FOD_MATERIAL.PART_NO <= "9900000" and 
      FODMTL_FODB05.INDATE >= "2002/1/1" and 
      FODMTL_FODB05.INDATE <= "2003/3/20" and
      FOD_MATERIAL.UNIT=FODP06.CODE and 
      FOD_MATERIAL.PART_NO=FODMTL_FODB05.PART_NO 
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-20 17:41:48 IP:61.218.xxx.xxx 未訂閱
前輩, 我知道原因了, 謝謝!! 我在table有用到search的都加上 index key就行了,現在20萬筆只要14秒 CREATE TABLE `FODMTL_FODB05` ( `TICKET_NO` varchar(60) default NULL, `SEQ` varchar(60) default NULL, `OPERATOR` varchar(60) default NULL, `MO_NUMBER` varchar(60) default NULL, `FR_STATION` varchar(60) default NULL, `TO_STATION` varchar(60) default NULL, `PART_NO` varchar(60) default NULL, `QTY1` decimal(14,4) default NULL, `QTY2` decimal(14,4) default NULL, `UPRICE` decimal(13,4) default NULL, `AMT` decimal(11,1) default NULL, `BOX` decimal(4,0) default NULL, `PRINT` decimal(2,0) default NULL, `REMARK` varchar(60) default NULL, `TYPE` varchar(60) default NULL, `TRANS` varchar(60) default NULL, `CURRENT_STOCK_QTY` decimal(13,3) default NULL, `INDATE` date default NULL, `COIN` varchar(60) default NULL, `ONWAY` decimal(11,3) default NULL, `RATE` decimal(9,4) default NULL, `POST` varchar(60) default NULL, `MEMO` varchar(60) default NULL, `REM_STOCK_QTY` decimal(13,3) default NULL, `ADJ_REASON` varchar(60) default NULL, `TRAN_AP` varchar(60) default NULL, `AMT_NTD` decimal(12,0) default NULL, `QTY3` decimal(13,4) default NULL, `STATUS` varchar(60) default NULL, `TAX` decimal(6,0) default NULL, `PRICE` decimal(13,4) default NULL, `DESCRIPTION` varchar(60) default NULL, `REM` varchar(60) default NULL, `BAT` varchar(60) default NULL, `SEQ1` varchar(60) default NULL, KEY `TICKET_NO` (`TICKET_NO`), KEY `PRICE` (`PRICE`), KEY `QTY1` (`QTY1`), KEY `DESCRIPTION` (`DESCRIPTION`), KEY `INDATE` (`INDATE`) ) TYPE=MyISAM; CREATE TABLE `FODP06` ( `CODE` varchar(30) default NULL, `DESCRIPT` varchar(30) default NULL, KEY `CODE` (`CODE`) ) TYPE=MyISAM; CREATE TABLE `FOD_MATERIAL` ( `PART_NO` varchar(60) NOT NULL default '', `DESCRIPTION` varchar(60) default NULL, `QTY` double default NULL, `SPEC` varchar(60) default NULL, `UNIT` varchar(60) default NULL, `UNIT_PRICE` double default NULL, `BOND` varchar(60) default NULL, `MATERIAL` varchar(60) default NULL, `ABC` varchar(60) default NULL, `DORI` varchar(60) default NULL, `LEADTM` double default NULL, `SAFTY_STOCK` double default NULL, `MACHCO` varchar(60) default NULL, `CANCEL` varchar(60) default NULL, `OUTDAY` varchar(60) default NULL, `INDAY` varchar(60) default NULL, `CHKDAY` varchar(60) default NULL, `BUILD` varchar(60) default NULL, `ORDSTK` double default NULL, `LOCATOR` varchar(60) default NULL, `ECONM` double default NULL, `LMONTH` double default NULL, `ENDCNT` double default NULL, `MI_` double default NULL, `MOUT` double default NULL, `MBAN` double default NULL, `MBAD` double default NULL, `MIQC` double default NULL, `ONWAY` double default NULL, `PS1` varchar(60) default NULL, `PS2` varchar(60) default NULL, `PS3` varchar(60) default NULL, `UP_DATE` varchar(60) default NULL, `P01` varchar(60) default NULL, `P02` varchar(60) default NULL, `P03` varchar(60) default NULL, `P04` varchar(60) default NULL, `LMONTH_M` double default NULL, `TUP` double default NULL, `USER_NO` varchar(60) default NULL, `TIM_` varchar(60) default NULL, `SYS_DATE` varchar(60) default NULL, `ESTM` double default NULL, `CONSUME` varchar(60) default NULL, `EQUIP` varchar(60) default NULL, `RT_QTY` double default NULL, `UPRICE` double default NULL, `L_IN_QTY` double default NULL, `L_OUT_QTY` double default NULL, `M_IN` double default NULL, `NTD` double default NULL, `CURCY` varchar(60) default NULL, `L2_OUT_QTY` double default NULL, `VER` varchar(60) default NULL, `BUYOFF_REP` varchar(60) default NULL, `ADJ_IN` double default NULL, `ADJ_OUT` double default NULL, `CHECK_YN` varchar(60) default NULL, `INV_LESS` varchar(60) default NULL, `BUYER_NO` varchar(60) default NULL, `VEND_NO` varchar(60) default NULL, `M_ADJ_IN` double default NULL, `M_ADJ_OUT` double default NULL, `L_ADJ_OUT` double default NULL, `L_ADJ_IN` double default NULL, `PS_MAT` varchar(60) default NULL, `NMONTH` double default NULL, `N2MONTH` double default NULL, `CLEAR_NO` varchar(60) default NULL, KEY `PART_NO` (`PART_NO`), KEY `DESCRIPTION` (`DESCRIPTION`) ) TYPE=MyISAM;
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-20 17:43:26 IP:61.220.xxx.xxx 未訂閱
提供你參考一下 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24621 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-05-19 11:29:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!