한번에 3천건 !! 0 7 1,342

by 개꿈 [SQL Query] [2016.01.06 17:41:05]


그냥 단순한 테이블인데요. 

데이터는 총 15만건 정도 됩니다.

단순한 조건(where addr = '서울') 이런 조건을 주고 불러오는데요

보통 3천건정도 불러옵니다. 그런데 속도가 3~4초 정도 나오네요..

해당 컬럼에 인덱스를 줬는데도 속도는 안나옵니다..

페이징 처리는 하면안되고 전부 불러와야 됩니다..

고수님들의 도움이 필요합니다 ㅠㅠ

 

부탁드립니다!

 

by 아발란체 [2016.01.06 17:47:42]

속도가 차이 날 수 있는 단서가 부족한 것 같습니다.

플랜을 올려주실 수 있나용?


by 개꿈 [2016.01.06 18:05:01]

CREATE TABLE test
   (    "NAME" VARCHAR2(30 BYTE), 
    "BIRTH" VARCHAR2(8 BYTE), 
    "FIRSTDAY" VARCHAR2(30 BYTE), 
    "ADDR" VARCHAR2(352 BYTE), 
    "J_CH" VARCHAR2(50 BYTE), 
    "KK" VARCHAR2(50 BYTE), 
    "COMM" VARCHAR2(50 BYTE), 
    "ID" VARCHAR2(50 BYTE), 
    "LAT" VARCHAR2(50 BYTE), 
    "LNG" VARCHAR2(50 BYTE), 
    "FNUM" VARCHAR2(20 BYTE)

)

테이블 구조는 그냥 저렇게 단순합니다.

데이터는 15만건이고요.

where addr = '??'

이렇게 조건을 줬을경우 3초이상 걸리네요..

빠르게 조회할 수 있는 방법이 궁급합니다..

테이블을 변경을 해도되고 제약은 없습니다..


by 아발란체 [2016.01.06 18:32:20]

서버 하드웨어 성능이 좋지 않은거 아닌가요? @.@)?

고작 건수가 15만건이고, 3천건 조회에, 스키마보면 큰 싸이즈도 아닌데.. ㅡ,.ㅡ;

 


by 아발란체 [2016.01.06 18:38:56]
--PC에서 올려주신 스키마를 이용 똑같이 테이블 만들고 데이타 15만건 만들고 서울 3천건 나오게 했는데... 음.. 1초도 안걸리는뎅... 성능상 문제가 아니라면 속도가 걸릴 부분이 보이지 않아용... 혹 해결되시면 내용 공유좀 부탁드립니다.

CREATE TABLE TEST(
  "NAME" VARCHAR2(30 BYTE), 
  "BIRTH" VARCHAR2(8 BYTE), 
  "FIRSTDAY" VARCHAR2(30 BYTE), 
  "ADDR" VARCHAR2(352 BYTE), 
  "J_CH" VARCHAR2(50 BYTE), 
  "KK" VARCHAR2(50 BYTE), 
  "COMM" VARCHAR2(50 BYTE), 
  "ID" VARCHAR2(50 BYTE), 
  "LAT" VARCHAR2(50 BYTE), 
  "LNG" VARCHAR2(50 BYTE), 
  "FNUM" VARCHAR2(20 BYTE)
);

CREATE INDEX IDX_TEST_ADDR ON TEST(addr);

INSERT INTO TEST
SELECT
  '고길동', '19990101', 'FIRSTDAY.........',
  DECODE(ROUND(DBMS_RANDOM.VALUE() * 4), 0, '대전', 1, '대구', 2, '부산', 3, '제주', 4, '경기'),
  'J_CH...............', 'KK...............', 'COMM............', 'ID...........', 'LAT...........', 'LNG.............', 'FNUM..............'
FROM
  DUAL
CONNECT BY LEVEL <= 147000
;

INSERT INTO TEST
SELECT
  '고길동', '19990101', 'FIRSTDAY.........',
  '서울',
  'J_CH...............', 'KK...............', 'COMM............', 'ID...........', 'LAT...........', 'LNG.............', 'FNUM..............'
FROM
  DUAL
CONNECT BY LEVEL <= 3000
;


SELECT * FROM TEST A WHERE addr = '서울';

 


by 개꿈 [2016.01.06 19:16:03]

지금 올려주신거 그대로 실행해봤는데요.

3.7초 걸리는데요..

툴에서 인출된 행은 총 3천건이구요.


by 아발란체 [2016.01.06 20:05:02]

넹, 똑같이 만든 것이라 똑같이 시간이 걸릴 것 같습니다.

3000건 조회를 위해 불필요하게 기술된 것은 없는 것 같습니다.

 

근데 만약 업무용 화면을 만들거나 화면에 출력하는 것이라면 쉽게 개선 할 수 있습니다.

페이징 처리 하면 됩니다. 내용은 아래 링크 강좌 참고하시면 됩니다.

관련 강좌 : http://www.gurubee.net/lecture/2287

적용할 경우 1초 미만으로 떨어집니다.


by 마농 [2016.01.07 10:41:42]

DB 서버 사양이 현격히 떨어지거나.

DB 가 지금 다른 작업으로 엄청 바쁘게 일하고 있거나.

사용하신 툴에 문제가 있는것은 아닌지?

아니면 자바 같은 프로그램에서 화면 만드는데 시간이 오래 걸리는 건 아닌지?

쿼리만 봐서는 절대 느릴 것 같지 않네요.

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