database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30589 게시물 읽기
No. 30589
select 속도 질문
작성자
이광영(hyperhand)
작성일
2013-05-15 10:19ⓒ
2013-05-15 12:41ⓜ
조회수
9,061

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

이 글에 대한 댓글이 총 4건 있습니다.

날짜범위 조회인 경우 현재 생성한 index 중 뒤컬럼인

`FLD_CONTROLLER_ID`,`FLD_TAG_ADDRESS`,`FLD_CONVERTER_ID`,`FLD_AGENT_ID`

이 사용되지 못합니다.

 

조회조건에 필수로 항상 특정에이전트 ... 가 포함된다면

index를 재생성해서 fld_date를 제일 뒤로 옮겨 보세요.

박인호(paerae)님이 2013-05-15 10:48에 작성한 댓글입니다.

 날짜 컬럼이 문자열로 되어 있는데도 마찬가지인가요?

이광영(hyperhand)님이 2013-05-15 12:42에 작성한 댓글입니다.

데이터 type과 관계없이 rangscan일 경우 그렇습니다.

 

박인호(paerae)님이 2013-05-15 14:10에 작성한 댓글입니다.

 답변 감사합니다. 많이 배웠습니다^^

이광영(hyperhand)님이 2013-05-15 15:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30592query: 0.031 sec. (+ 3.339 sec. network) 뜻? [1]
최진안
2013-05-16
10012
30591MySQL index drop 질문이요 [4]
이광영
2013-05-16
9281
30590쿼리 질문이요. [2]
이광영
2013-05-15
8913
30589select 속도 질문 [4]
이광영
2013-05-15
9061
30588클러스터 디비를 사용하는데요 autoincrement값이 튀네요.
클러스터
2013-05-08
8720
30587long_query_time 의 기준 time 문의드립니다. [2]
김재현
2013-05-08
9747
30585트랜젝션 [1]
기훈
2013-05-05
8576
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다