내 쿼리를 더 빠르게 만드는 방법에 대해 제발 나를 설명하거나 설명해 줄 수 있습니까? 이 쿼리는 거의 1GB 데이터를 사용하여 (로컬 컴퓨터에서) 거의 10 초 걸립니다. 여기내 mysql 쿼리를보다 빠르게 만드는 데 도움이 필요합니다.
내 설명하고 설명 resuls
explain select p.delivery_date, p.delivery_hour, p.resource_id, p.participant_id, p.price, p.date_posted, hour(p.date_posted) as hour_date_posted, date(p.date_posted) as date_date_posted
,s.mw
from prices_report as p
left join schedules_report s
on s.delivery_date = p.delivery_date
AND s.type_id = p.type_id
and s.delivery_hour = p.delivery_hour
and s.resource_id = p.resource_id
and s.participant_id = p.participant_id
and hour(s.date_posted) = hour(p.date_posted)
and date(s.date_posted) = date(p.date_posted)
WHERE p.delivery_date = '2012-05-22'
AND p.type_id = 'GEN'
ORDER BY p.delivery_date, p.resource_id, p.delivery_hour, p.participant_id, p.type_id, p.date_posted
설명 결과입니다 :
ID : 1 개
선택 유형 : 간단한
테이블 : P
유형 : ref
가능 YS : IDX1
키 IDX1
있는 key_len 4
REF : CONST 행
: 40,258
추가 : 사용
ID : 1 개
선택 유형 : 간단한 테이블
: S
유형 : REF
가능한 키 : 키 IDX1
: IDX1
있는 key_len 63
,745,151 5,REF : CONST, APC_DB.p.delivery_hour, APC_DB.p.participant_id, APC_DB.p.resource_id, CONST 행
: 추가 99
:
테이블 구조 :
CREATE TABLE `prices_report` (
`id` int(11) NOT NULL auto_increment,
`delivery_date` date default NULL,
`delivery_hour` int(2) default NULL,
`participant_id` varchar(10) default NULL,
`resource_id` varchar(15) default NULL,
`type_id` varchar(10) default NULL,
`price` float default NULL,
`date_posted` datetime NOT NULL,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX1` USING BTREE (`delivery_date`,`resource_id`,`delivery_hour`,`participant_id`,`type_id`,`date_posted`)
) ENGINE=MyISAM AUTO_INCREMENT=5261441 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE `schedules_report` (
`id` int(11) NOT NULL auto_increment,
`delivery_date` date default NULL,
`delivery_hour` int(2) default NULL,
`participant_id` varchar(15) default NULL,
`resource_id` varchar(20) default NULL,
`type_id` varchar(10) default NULL,
`mw` float default NULL,
`loss_factor` float default NULL,
`date_posted` datetime NOT NULL,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX1` USING BTREE (`delivery_date`,`delivery_hour`,`participant_id`,`resource_id`,`type_id`,`date_posted`)
) ENGINE=MyISAM AUTO_INCREMENT=43369 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
백만 감사
prices_report 및 schedules_report에는 몇 행이 있습니까? 해당 기간에 몇 개의 레코드가 있습니까? 스키마/색인도 함께 보여주십시오. 덕분에 – Ami