두 개의 MySQL 테이블을 결합하여 뷰로 저장하고자하므로 두 테이블을 쿼리하는 대신 응용 프로그램에서이 뷰를 처리 할 수 있습니다. 그러나이 견해는 극도로 천천히 진행됩니다.MySQL보기 최적화
이 내 테이블입니다 :
CREATE TABLE spectrumsets (
setid INT(11) NOT NULL,
timestampdt INT(11) NULL DEFAULT NULL,
timestampd INT(10) UNSIGNED NOT NULL,
timestampt INT(10) UNSIGNED NOT NULL,
device INT(11) NOT NULL,
methodname VARCHAR(50) NOT NULL,
PRIMARY KEY (setid),
UNIQUE INDEX setid_idx (setid),
UNIQUE INDEX timestamp_device_idx (timestampd, timestampt, device),
INDEX device_fk (device),
INDEX timestampd_idx (timestampd),
CONSTRAINT device_fk FOREIGN KEY (device)
REFERENCES spectrumdevices (deviceid)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
CREATE TABLE spectrumdata (
valueid INT(11) NOT NULL AUTO_INCREMENT,
spectrumset INT(11) NOT NULL,
wavelength DOUBLE NULL DEFAULT NULL,
intensity DOUBLE NULL DEFAULT NULL,
PRIMARY KEY (valueid),
INDEX spectrumset_idx (spectrumset),
CONSTRAINT spectrumset_fk FOREIGN KEY (spectrumset)
REFERENCES spectrumsets (setid)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
그리고 이것은 내보기입니다 :
SELECT spectrumsets.timestampd,spectrumsets.timestampt,spectrumsets.device,
spectrumdata.wavelength,spectrumdata.intensity
FROM spectrumdata INNER JOIN spectrumsets ON spectrumdata.spectrumset=
spectrumsets.setid
WHERE spectrumdata.wavelength>0
ORDER BY spectrumsets.timestampd,spectrumsets.timestampt,spectrumsets.device,
spectrumdata.wavelength
내 컴퓨터에 select count(*)
그래서, 82923705 개 기록에 오히려 큰 데이터 세트를 385.516 초 결과를 소요
나는 이미이 link을 발견했지만 아직도 잘못 이해하지는 못했습니다.
UPDATE :
EXPLAIN
주는이 결과 :
"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
"1","SIMPLE","spectrumsets","index","PRIMARY,setid_idx","timestamp_device_idx","12",NULL,"327177","Using index; Using temporary; Using filesort"
"1","SIMPLE","spectrumdata","ref","spectrumset_idx","spectrumset_idx","4","primprod.spectrumsets.setid","130","Using where"
당신은 EXPLAIN 사용했다? –
'analyze tables spectrumdata spectrumsets '을 실행하면 어떤 차이가 있습니까? – Bohemian
buffer_pool_size는 무엇입니까? 데이터 세트가 메모리에 들어 가지 않는 것처럼 보입니다. 그래서 전체 테이블 스캔을하는 동안 InnoDB가 디스크를 강탈하고있는 것 같습니다. –