select 속도 저하 질문 0 1 3,829

by 이광영 [MySQL] select 속도 [2013.05.15 10:21:20]


CREATE TABLE `tbl_trend` (
  `FLD_DATE` char(14) NOT NULL,      -- 저장날짜
  `FLD_AGENT_ID` int(10) unsigned NOT NULL,   -- 에이전트 ID
  `FLD_CONVERTER_ID` tinyint(3) unsigned NOT NULL,   -- 컨버터 ID
  `FLD_CONTROLLER_ID` tinyint(3) unsigned NOT NULL,  -- 컨트롤러 ID
  `FLD_TAG_ADDRESS` smallint(5) unsigned NOT NULL,   -- 태그 주소
  `FLD_MAX` double NOT NULL,    -- 최대값
  `FLD_MIN` double NOT NULL,     -- 최소값
  `FLD_AVG` double NOT NULL,    -- 평균값
  `FLD_GUIDE_VALUE` double NOT NULL,   -- 설정값
  `FLD_IS_USE_GUIDE` tinyint(4) NOT NULL DEFAULT '0',
  KEY `IDX1_TBL_TREND` (`FLD_DATE`,`FLD_CONTROLLER_ID`,`FLD_TAG_ADDRESS`,`FLD_CONVERTER_ID`,`FLD_AGENT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

DB 초짜 질문이요.
위와 같은 테이블과 인덱스를 구성했습니다.
각 에이전트에는 다수의 컨버터가 있고,
각 컨버터에는 다수의 컨트롤러가 있고,
각 컨트롤러에는 다수의 태그 주소가 있으며,
태그 주소별로 최대값, 최소값, 평균값, 설정값 등이 일정시간마다 저장됩니다.
궁금한건 어느 순간부터 select 속도가 너무 느려졌다는 겁니다.
현재 총 데이터량이 7000만건 정도되는데 
특정 에이전트 - 특정 컨버터 - 특정 컨트롤러 - 특정 태그주소 - 지정날짜 범위로 select하여 약80만건 조회디는데 2분정도 걸립니다. 너무 오래 걸리는것 같은데 어떻게 조치를 취해야할지 난감합니다.
조회는 아래처럼 프로시저를 생성해서 조회했습니다.

CREATE PROCEDURE SP_Select
(
in v_agent_id int unsigned,
in v_converter_id tinyint unsigned,
in v_controller_id tinyint unsigned,
in v_tag_address smallint unsigned,
in v_start_date char(14),
in v_end_date char(14)
)
begin
select fld_date, fld_max, fld_min, fld_avg, fld_guide_value, fld_is_use_guide
from TBL_TREND
where fld_agent_id = v_agent_id
and fld_converter_id = v_converter_id
and fld_controller_id = v_controller_id
and fld_tag_address = v_tag_address
and fld_date between v_start_date and v_end_date
order by fld_date;
end
by 마농 [2013.05.15 13:26:14]

결합인덱스의 첫번째 컬럼만 범위조건이고 나머지는 이퀄조건이네요.
범위조건이 먼저 오는 경우에는 후행 조건은 엑세스 조건이 아닌 필터조건이 되어 버립니다.
기타 점조건이 앞으로 오고 날짜컬럼이 뒤로 가는 인덱스를 생성하세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입