我想知道是否有办法优化此查询:
SELECT Avg(selloff1),
YEAR(dt),
weekno
FROM bbproduct
GROUP BY YEAR(dt),
weekno
表架构是:
CREATE TABLE `bbproduct` (
`id` bigint(20) NOT NULL,
`CUSTNO` decimal(6,0) unsigned zerofill NOT NULL default '000000',
`DEPTNO` decimal(1,0) unsigned zerofill NOT NULL default '0',
`PRODNO` decimal(4,0) unsigned zerofill NOT NULL default '0000',
`DT` date NOT NULL,
`ARDATE8N` decimal(8,0) unsigned zerofill NOT NULL default '00000000',
`STORENO` char(6) NOT NULL default '0',
`DAYCODE` decimal(1,0) unsigned zerofill NOT NULL default '0',
`WEEKNO` decimal(2,0) unsigned zerofill NOT NULL default '00',
`WKOFMONTH` decimal(2,0) unsigned zerofill NOT NULL default '00',
`QUANTITY` decimal(7,0) NOT NULL default '0',
`CARRYOVER` decimal(7,0) NOT NULL default '0',
`SELLOFF1` decimal(7,0) NOT NULL default '0',
`ONHANDQTY` decimal(7,0) NOT NULL default '0',
`KNOWNLOSS` decimal(7,0) NOT NULL default '0',
`ORDER` decimal(7,0) NOT NULL default '0',
`FAMLYCD` decimal(4,0) NOT NULL default '0',
`ROUTENO` decimal(4,0) NOT NULL default '0',
`AGENCYNO3N` decimal(3,0) NOT NULL default '0',
`RETURNS` decimal(7,0) NOT NULL,
`LASTUPDATE` datetime NOT NULL,
PRIMARY KEY (`CUSTNO`,`DEPTNO`,`PRODNO`,`DT`),
KEY `in_bbproduct_custnodeptnoprodno` (`CUSTNO`,`DEPTNO`,`PRODNO`),
KEY `in_bbproduct_deptnocustno` USING BTREE (`DEPTNO`,`CUSTNO`),
KEY `in_bbproduct_custno` USING BTREE (`CUSTNO`),
KEY `in_bbproduct_dt` USING BTREE (`DT`),
KEY `in_bbproduct_routeno` (`ROUTENO`),
KEY `in_bbproduct_selloff1` (`SELLOFF1`),
KEY `in_bbproduct_weekno` (`WEEKNO`),
KEY `in_bbproduct_routenoweekno` (`WEEKNO`,`ROUTENO`),
KEY `in_bbproduct_agencyroutedt` USING BTREE (`AGENCYNO3N`,`ROUTENO`,`DT`),
KEY `in_bbproduct_routenoagencyno3n` (`ROUTENO`,`AGENCYNO3N`),
KEY `in_bbproduct_agencyno` (`AGENCYNO3N`),
KEY `in_bbproduct_storeno_prodno` (`STORENO`,`PRODNO`),
KEY `ind_deptno_prodno` (`DEPTNO`,`PRODNO`),
KEY `ind_prodno` (`PRODNO`),
KEY `ind_dt_custno_deptno_prodno` (`DT`,`CUSTNO`,`DEPTNO`,`PRODNO`),
KEY `ind_dt_selloff1` (`DT`,`SELLOFF1`)
) ENGINE=MyISAM AUTO_INCREMENT=9300871 DEFAULT CHARSET=latin1
需要14秒,表有9百万条记录,查询返回15行。我需要将此结果集与其他一些记录一起加入。
我还可以做些什么吗?
答案 0 :(得分:2)
由于您按年份和周数进行分组,因此我认为大多数数据的变化不会超过每周。您可以将结果缓存到另一个表中,该表每周只能批量更新一次。