SQL速度改善!!(幫忙~ 3Q~~~) |
答題得分者是:T.J.B
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
請教高手~ 我下了這個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 發送簡訊給我 |
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
前輩, 我知道原因了, 謝謝!!
我在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |