쿼리 속도를 개선할 방법이 없을까요? > 자유게시판

자유게시판

쿼리 속도를 개선할 방법이 없을까요? 정보

쿼리 속도를 개선할 방법이 없을까요?

본문

in_table의 자료(입고자료)
in_code  in_pumno  in_dcno  in_amt  in_vendor  in_comp 
173-2 11105D(3/11) 2005173-2 11105D 1020 ISP 1공장
173-2 11157N(5/5) 2005173-2 11157N 357 ISP 1공장
173-2 11161D(5/10) 2005173-2 11166D 85 ISP 1공장
173-2 11165N(5/10) 2005173-2 11165N 459 ISP 1공장
173-2 11167D(5/18) 2005173-2 11167D 510 ISP 1공장
173-2 11167N(5/17) 2005173-2 11167N 510 ISP 1공장
173-2 11167N(5/18) 2005173-2 11167N 255 ISP 1공장
173-2 11167N(5/18)2 2005173-2 11167N 510 ISP 1공장
173-2 11171D(5/18) 2005173-2 11171D 255 ISP 1공장
173-2 11171N(5/18) 2005173-2 11171N 510 ISP 1공장
173-2 11172D(5/18) 2005173-2 11172D 510 ISP 1공장
173-2 11172N(5/18) 2005173-2 11172N 272 ISP 1공장
173-2 11172N(5/18)2 2005173-2 11172N 510 ISP 1공장
173-2 11173D(5/18) 2005173-2 11173D 221 ISP 1공장
173-2 11202D(5/20) 2005173-2 11202D 136 ISP 1공장
173-2 11202N(5/20) 2005173-2 11202N 408 ISP 1공장
173-2 11202N(5/20)2 2005173-2 11202N 374 ISP 1공장
173-2 11203D(5/20) 2005173-2 11203D 102 ISP 1공장
173-2 11203D(5/24) 2005173-2 11203D 136 ISP 1공장
173-2 11203D(5/24)2 2005173-2 11203D 510 ISP 1공장
173-2 11203N(5/20) 2005173-2 11203N 510 ISP 1공장
173-2 11203N(5/24) 2005173-2 11203N 374 ISP 1공장
173-2 11203N(5/24)2 2005173-2 11203N 493 ISP 1공장
173-2 11204D(5/20) 2005173-2 11204D 357 ISP 1공장
173-2 11204D(5/20)2 2005173-2 11204D 510 ISP 1공장
173-2 11204N(5/20) 2005173-2 11204N 153 ISP 1공장
173-2 11204N(5/24) 2005173-2 11204N 510 ISP 1공장
173-2 11205D(5/24) 2005173-2 11205D 17 ISP 1공장
173-2 11205N(5/24) 2005173-2 11205N 493 ISP 1공장
173-2 11212N(5/28) 2005173-2 11212N 884 ISP 1공장
 
pr_table의 자료(출고자료)
pr_code                pr_pumno  pr_vendor  pr_amt 
173-2 11105D(3/11) 2005173-2   ISP           1020
173-2 11157N(5/5) 2005173-2 ISP 357
173-2 11161D(5/10) 2005173-2 ISP 85
173-2 11165N(5/10) 2005173-2 ISP 459
173-2 11167D(5/18) 2005173-2 ISP 510
173-2 11167N(5/17) 2005173-2 ISP 510
173-2 11167N(5/18) 2005173-2 ISP 255
173-2 11167N(5/18)2 2005173-2 ISP 510
173-2 11171D(5/18) 2005173-2 ISP 255
173-2 11171N(5/18) 2005173-2 ISP 510
173-2 11172D(5/18) 2005173-2 ISP 510
173-2 11172N(5/18) 2005173-2 ISP 272
173-2 11172N(5/18)2 2005173-2 ISP 510
173-2 11173D(5/18) 2005173-2 ISP 221
173-2 11202D(5/20) 2005173-2 ISP 136
173-2 11202N(5/20) 2005173-2 ISP 408
173-2 11202N(5/20)2 2005173-2 ISP 374
173-2 11203D(5/20) 2005173-2 ISP 102
173-2 11203D(5/24) 2005173-2 ISP 136
173-2 11203D(5/24)2 2005173-2 ISP 510
173-2 11203N(5/20) 2005173-2 ISP 510
173-2 11203N(5/24) 2005173-2 ISP 374
173-2 11203N(5/24)2 2005173-2 ISP 493
173-2 11204D(5/20) 2005173-2 ISP 357
173-2 11204D(5/20)2 2005173-2 ISP 510
173-2 11204N(5/20) 2005173-2 ISP 153
173-2 11204N(5/24) 2005173-2 ISP 510
173-2 11205D(5/24) 2005173-2 ISP 17
173-2 11205N(5/24) 2005173-2 ISP 493
 
SELECT a.in_pumno, a.in_code, a.in_dcno, a.in_amt, b.pr_amt , a.in_amt-b.pr_amt , a.in_vendor
FROM (
SELECT in_code, in_pumno, in_dcno, ifnull( sum(in_amount), 0 ) as in_amt, in_vendor
FROM in_table
WHERE in_pumno = '2005173-2'
GROUP BY in_code
) AS a
LEFT JOIN (
SELECT pr_code, ifnull(sum(pr_amount), 0 ) as pr_amt
FROM pr_table
WHERE pr_pumno = '2005173-2'
GROUP BY pr_code
) AS b ON a.in_code = b.pr_code
ORDER BY a.in_pumno
LIMIT 0 , 30
 
재고 수량...쿼리 출력결과(약 40초 걸림)
 
in_pumno  in_code  in_dcno  ifnull( a.in_amt , 0 )  ifnull( b.pr_amt , 0 )  ifnull( a.in_amt , 0 ) - ifnull( b.pr_amt , 0 )  in_vendor 
2005173-2 3SILKR001J8STV 11064N 17 17 0 ISP
2005173-2 3SILKR001L1SH6 11117N 17 17 0 ISP
2005173-2 3SILKR001MWBNC 11165N 17 17 0 ISP
2005173-2 3SILKR001QFRM3 11241N 17 17 0 ISP
2005173-2 3SILKR001RTZ7N 11275N 17 17 0 ISP
2005173-2 3SILKR001F2WDS 10485D 17 17 0 ISP
2005173-2 3SILKR001KQFJL 11107N 17 17 0 ISP
2005173-2 3SILKR001MNQBS 11162N 17 17 0 ISP
2005173-2 3SILKR001QC02T 11235N 17 17 0 ISP
2005173-2 3SILKR001RGHGW 11265D 17 17 0 ISP
2005173-2 3SILKR001KKSHZ 11104D 17 17 0 ISP
2005173-2 3SILKR001LND5B 11135D 17 17 0 ISP
2005173-2 3SILKR001Q15N2 11227N 17 17 0 ISP
2005173-2 3SILKR001R4BP9 11261N 17 17 0 ISP
2005173-2 3SILKR001K7SY4 11094N 17 17 0 ISP
2005173-2 3SILKR001LF7R0 11131N 17 17 0 ISP
2005173-2 3SILKR001PXD6X 11224N 17 17 0 ISP
2005173-2 3SILKR001QWNBR 11251D 17 17 0 ISP
2005173-2 3SILKR001JRB8G 11077N 17 17 0 ISP
2005173-2 3SILKR001L834Y 11125D 17 17 0 ISP
2005173-2 3SILKR001P8T5R 11205N 17 17 0 ISP
2005173-2 3SILKR001QPYGD 11245N 17 17 0 ISP
2005173-2 3SILKR001SLLKV 11297D 17 17 0 ISP
2005173-2 3SILKR001J8SV3 11064N 17 17 0 ISP
2005173-2 3SILKR001L1SHG 11117N 17 17 0 ISP
2005173-2 3silkr001mwbnm 11165N 17 17 0 ISP
2005173-2 3SILKR001QHLF0 11241D 17 17 0 ISP
2005173-2 3SILKR001RTZ7X 11275N 17 17 0 ISP
2005173-2 3SILKR001F2WF1 10485N 17 17 0 ISP
2005173-2 3SILKR001KQJBK 11107N 17 17 0 ISP
추천
0
  • 복사

댓글 58개

테이블 스키마하고
덤프 데이타 좀 같이 올려주세요.
외부 미팅이 있어서 나갔다와야 하네요. 이따가 다시 볼께요.
헉 이 데이터가 전체 데이터 인가요?
40초 걸렸다면 좀 심한데용..

전체 데이터가 아니라면
전체 덤프데이터가 있어야 비교를 할수 있을것 같네요..
두분 관심을 가져 주셔서 감사합니다.

http://kunwi.co.kr/gunwi/board.php?bo_table=B23&wr_id=440&page=0&sca=&sfl=&stx=&sst=&sod=&spt=0&page=0

덤프자료 올려둔 주소입니다. 이곳에는 그림파일만 올리게 되어있네요.^^
참여해 주시면 감사할 따름이죠. 이놈의 쿼리가 참으로 어렵네요.
입고, 출고 테이블 코드로 비교해서 같은 놈끼리 합산내는건데요.
재고 테이블을 별도로 운영하는 방안을 강구해야겠네요.
처음에는 속도에 전혀 문제가 없었는데 갈수록 태산이네요.
즐거운 오후되세요.
ALTER TABLE  `test1`.`in_table` ADD INDEX  `in_mix1` (  `in_code` ,  `in_pumno` );
ALTER TABLE  `test1`.`pr_table` ADD INDEX  `pr_mix1` (  `pr_pumno` ,  `pr_code` );


select in_code, max(in_pumno), max(in_dcno), sum(in_amt), sum(pr_amt), sum(in_amt) - sum(pr_amt), max(in_vendor) from (
SELECT in_code, in_pumno, in_dcno,  SUM( in_amount ) as in_amt, in_vendor, 0 as pr_amt
FROM in_table
WHERE in_pumno =  '2005173-2'
GROUP BY in_code
union all
SELECT pr_code as in_code, '' as in_pumno, '' as in_dcno, 0 as in_amt,'' as in_vendor, IFNULL( SUM( pr_amount ) , 0 ) AS pr_amt
FROM pr_table
WHERE pr_pumno =  '2005173-2'
GROUP BY pr_code
) a
group by in_code
order by in_code
LIMIT 30;

데이타가 맞는지 확인바랍니다.

subquery한 테이블끼리 outer join 시에는 index를 사용할 방법이 없습니다.(mysql 메뉴얼에는 있을려나 모르겠네요.) 아.. .관리자님이 산 책만 있어도 좀더 쉽게 할텐데....
쿼리를 실행했더니 아래와 같은 에러 메시지가 뜨네요. union all 문은 utf-8에서만 가능하다는 의미인가요?
#1267 - Illegal mix of collations (euckr_korean_ci,IMPLICIT) and (utf8_unicode_ci,COERCIBLE) for operation 'UNION'
pr_table 이 기준이라서 in_table에만 있는건 뺀 쿼리입니다.

select in_code, max(in_pumno), max(in_dcno), sum(in_amt), sum(pr_amt), sum(in_amt) - sum(pr_amt), max(in_vendor) from (
SELECT in_code, in_pumno, in_dcno,  SUM( in_amount ) as in_amt, in_vendor, 0 as pr_amt
FROM in_table
WHERE in_pumno =  '2005173-2'
GROUP BY in_code
union all
SELECT pr_code as in_code, '' as in_pumno, '' as in_dcno, 0 as in_amt,'' as in_vendor, IFNULL( SUM( pr_amount ) , 0 ) AS pr_amt
FROM pr_table
WHERE pr_pumno =  '2005173-2'
and pr_code in(select distinct(in_code) from in_table)
GROUP BY pr_code
) a
group by in_code
order by in_code
LIMIT 30;
이 코드로 테스트 하니..
-- 질의 실행시간 0.2347 초
엄청 빠르네요..
JOIN을 삭제하고 해서 그런가요.. 대단하십니다.^^
역시 쿼리는 어떤 방향으로 접근하느냐에 따라서 확실히 틀려지네요^^
만약 결과가 같다면...명랑폐인님 짱짱짱!!
어쩌면 쿼리를 자유자제로 구사할 수 있을까요.
실험이겠죠. 오로지 실험.........
참고로 기존 쿼리는 4초정도 걸렸습니다.

컴대장님 서버에서 40초 걸리셨다면

이 쿼리는 2초 정도 걸리겠네요...
흠흠...큰일이네요.
데이타베이스는 utf8_unicode_ci
테이블은 euckr_korean_ci
필드도 euckr_korean_ci
이래서 에러가 발생한것인가요?
혹 어느놈의 케릭셋을 변경해야할까요?
테이블 마다 케릭터셋이 정해져 있는데 그게 안맞는거 같습니다.
그걸 맞추어 줘야 할것 같습니다.
전 모두 utf8로 맞추었습니다.
흐미...저도 해보고 싶어요..
근데 케릭셋을 강제로 바꾸면 기존 데이터 한글이 깨지겠죠?...ㅠㅠ
시간되시면 db는 uft8로
테이블과 필드는 euckr로
설정하셔서 테스트 부탁드립니다.
저는 테이블과 필드 모두 euckr이거든요.
utf8로 변경하는건 간단합니다.
올려주신 덤프파일 열어서
테이블 생성하는 구문에서 케릭터셋 utf8바꾸고 덤프파일 업로드 하시면 됩니다.
결과가 좀 다른듯 합니다.
결과 파일을 엑셀로 올려두었습니다.
한번 봐 주십시오.
http://kunwi.co.kr/gunwi/board.php?bo_table=B23&wr_id=441
그러네요 결과 갯수가 좀 다르네요..

그러나 컴대장님께서 올려놓으신 원본 소스코드와는 올려주신 데이터셋과
결과가 동일합니다.
이렇게 하니까 좀더 빠르네요..

SELECT
  in_pumno,
  in_code,
  in_dcno,
  in_amt,
  pr_amt,
  in_amt-pr_amt,
  in_vendor
from (
  SELECT
    A.in_pumno,
    A.in_code,
    A.in_dcno,
    ifnull(sum(A.in_amount), 0) as in_amt,
    ifnull(sum(B.pr_amount), 0) as pr_amt,
    A.in_vendor
  FROM in_table A
  LEFT JOIN pr_table B ON (A.in_code=B.pr_code AND A.in_pumno=B.pr_pumno)
  WHERE A.in_pumno = '2005173-2'
  GROUP BY A.in_code
) T
ORDER BY in_pumno
-- 질의 실행시간 0.1480 초
결과를 비교해보면..
-----------------------
-- 원본
SELECT
  a.in_pumno,
  a.in_code,
  a.in_dcno,
  a.in_amt,
  b.pr_amt,
  a.in_amt-b.pr_amt,
  a.in_vendor
FROM (
  SELECT in_code, in_pumno, in_dcno, ifnull( sum(in_amount), 0 ) as in_amt, in_vendor
  FROM in_table
  WHERE in_pumno = '2005173-2'
  GROUP BY in_code
) AS a
LEFT JOIN (
  SELECT pr_code, ifnull(sum(pr_amount), 0 ) as pr_amt
  FROM pr_table
  WHERE pr_pumno = '2005173-2'
  GROUP BY pr_code
) AS b ON a.in_code = b.pr_code
ORDER BY a.in_pumno
-- 질의 실행시간 4.6706 초
-- 5,286 합계


SELECT
  in_pumno,
  in_code,
  in_dcno,
  in_amt,
  pr_amt,
  in_amt-pr_amt,
  in_vendor
FROM (
  SELECT
    A.in_pumno,
    A.in_code,
    A.in_dcno,
    ifnull(sum(A.in_amount), 0) as in_amt,
    ifnull(sum(B.pr_amount), 0) as pr_amt,
    A.in_vendor
  FROM in_table A
  LEFT JOIN pr_table B ON (A.in_code=B.pr_code AND A.in_pumno=B.pr_pumno)
  WHERE A.in_pumno = '2005173-2'
  GROUP BY A.in_code
) T
ORDER BY in_pumno
-- 질의 실행시간 0.1480 초
-- 5,286 합계

-----------------------------
55,877 합계 - in
73,021 합계 - pr
이렇게 데이터가 들어 있는거 아닌가요?

이 상태에서 컴대장님 원본 쿼리를 날려보면 약 5천개 좀 넘는 결과가 나옵니다.
캬...대단하십니다. 엄청난 내공을 가지고 계시군요.
몇날 몇일을 끙끙대다가 여기에 어렵게 질문을 올렸는데 해결되었네요.
필드순서가 바뀌었네요..ㅋㅋ 두번 덕분에 어려운 과제한개를 해결했네요.
쿼리 공부는 해도 뭐가 뭔지 잘 모르겠네요. 머리에 한계인가 봅니다.
다시한번 테스트 해보고 글 적겠습니다. 다시한번 두분께 감사합니다.
서브쿼리를 제거하면 더 빠른 결과를 얻을수 있네요..
----
  SELECT
    A.in_pumno,
    A.in_code,
    A.in_dcno,
    ifnull(sum(A.in_amount), 0) as in_amt,
    ifnull(sum(B.pr_amount), 0) as pr_amt,
    ifnull(sum(A.in_amount), 0)-ifnull(sum(B.pr_amount), 0) as stock,
    A.in_vendor
  FROM in_table A
  LEFT JOIN pr_table B ON (A.in_code=B.pr_code AND A.in_pumno=B.pr_pumno)
  WHERE A.in_pumno = '2005173-2'
  GROUP BY A.in_code
-- 질의 실행시간 0.0030 초
이제 막 데이트 마치고 집에 왔네요^^
한가지 질문 드릴것이 in_table의 in_code는 중복이 안되는 데이터 인가요?
그렇다면 다음과 같이 간단하게.. 속도만 쿼리 짜봤습니다~
왠지 뻘짓한것같은 ㅠ_ㅠ;; 속도만 빠릅니다 ㅎㅎ  0.0452초

SELECT A.in_pumno, A.in_code, A.in_dcno, A.in_amount, SUM( B.pr_amount ) AS pr_amt, A.in_amount - SUM( B.pr_amount ) AS stoc, A.in_vendor
FROM in_table A, pr_table B
WHERE A.in_pumno = '2005173-2'
AND A.in_pumno = B.pr_pumno
AND A.in_code = B.pr_code
GROUP BY B.pr_code
혹시 몰라서 in_table에 in_code는 중복 체크를 해봤는데
중복은 없네요 ㅎㅎ; 중복없다는 조건에서만 유효한 쿼리같아요^^;
출력결과 레코드수가 많은듯 하네요.
어디가 문제인지 다시한번 보도록 하겠습니다.
관심가져주셔서 감사합니다.
행복한 주말되세요.
이리저리 다 해보아도 명랑폐인 님께서 알려주신 방법이 제일 빠르네요
-----------------
select
  '2005173-2' as in_pumno,
  in_code,
  max(in_dcno),
  sum(in_amt),
  sum(pr_amt),
  sum(in_amt) - sum(pr_amt) as stock,
  max(in_vendor)
from (
  SELECT
    in_code,
    in_dcno,
    SUM(in_amount) as in_amt,
    in_vendor,
    0 as pr_amt
  FROM in_table
  WHERE in_pumno = '2005173-2'
  GROUP BY in_code
  union all
  SELECT
    pr_code as in_code,
    '' as in_dcno,
    0 as in_amt,
    '' as in_vendor,
    IFNULL( SUM( pr_amount ) , 0 ) AS pr_amt
  FROM pr_table
  WHERE pr_pumno = '2005173-2'
  and pr_code in(select distinct(in_code) from in_table)
  GROUP BY pr_code
) T
group by in_code
order by in_code
---------------
-- 질의 실행시간 0.2368 초
종합분석하여 아래와 같은 쿼리문으로 적용하였습니다.
검색 조건이 품번으로 할때도 있지만 다른 조건의 검색도 있기에 '2005173-2' as in_pumno 부분을 수정하였습니다. 관심가져 주신 모든 분들께 감사의 인사를 드립니다. 행복하세요.^^
 
SELECT in_pumno, in_code, max( in_dcno ) , sum( in_amt ) , sum( pr_amt ) , sum( in_amt ) - sum( pr_amt ) AS stock, max( in_vendor )
FROM (

SELECT in_pumno, in_code, in_dcno, SUM( in_amount ) AS in_amt, in_vendor, 0 AS pr_amt
FROM in_table
WHERE 조건식
GROUP BY in_code
UNION ALL SELECT pr_pumno AS in_pumno, pr_code AS in_code, '' AS in_dcno, 0 AS in_amt, '' AS in_vendor, IFNULL( SUM( pr_amount ) , 0 ) AS pr_amt
FROM pr_table
WHERE 조건식1
AND pr_code
IN (

SELECT DISTINCT (
in_code
)
FROM in_table
)
GROUP BY pr_code
)T
GROUP BY in_code
ORDER BY in_code
LIMIT 0 , 30
늦었지만 저도 제출해 봅니다.

SELECT in_code, in_dcno, in_amount, ifnull(sum(pr_amount), 0) as pr_amt, (in_amount - ifnull(sum(pr_amount), 0)) as amt, in_vendor
FROM `in_table` a left join pr_table b on (a.in_code = b.pr_code)
WHERE in_pumno = '2005173-2'
group by in_code
order by in_code
헉...관리자님께서 관심을 가져주시니 송구할 따름입니다.
너무 감사하구요. 내일 바로 적용해 보도록 하겠습니다.
집에 컴퓨터 없으니 무인도에 유배된 기분이네요.
지금은 누나집....ㅠㅠ
월요일에 오니까 많은 리플이 달렸군요.. 개발자 게시판 완전 흥합니다.^^
본문 쿼리에만 충실하게 코드를 짰는데, 생각해보니 관리자님 코드로 해도 될것 같습니다. UNION ALL 쿼리는 resultset 이 많아질수록 속도가 느려집니다.
원 테이블에서
ALTER TABLE  `in_table` ADD INDEX  `in_mix1` (  `in_code` ,  `in_pumno` ); 를 추가하시는것 잊지 마시구요.
인덱스를 추가하고 나서 explain 을 해보니 결과가 참 이쁘게 나옵니다.
관리자님 코드는..
in_code가 유일할때에만 적용됩니다.

테이블에는 in_code가 중복이 가능합니다.
in_code가 동일한 것이 두개가 되어버리면 결과가 틀려집니다.

순도뤼님 께서 올려주신 소스와 동일한 이유죠..
코드가 같지 않습니다.
순도뤼님 쿼리는 아래 두행이 누락됩니다.
"2005173-2";"3SILKR001STRKV";"11303N";"17";"0";"17";"ISP"
"2005173-2";"3SILKR001STRL5";"11303N";"17";"0";"17";"ISP"
관리자님 꼭 집어주셔서 감사해요~
저는 inner join 걸어서 누락됬네요^ ^!!
explain 걸어서 확연히 다름을 확인했어요~
좋은 가르침 감사드려요~!!
관리자님의 쿼리가 속도면에서 가장 빠르게 나오네요.
같은 Left Join문인데 어떻게 사용하느냐에 따라 엄청난 결과를 초래하네요.
아는것도 중요하지만 쓰임새를 알고 효율적으로 사용하는것이 중요하군요.
감사한 분이 한분 늘었네요. 무지 행복합니다.
늘 행복이 충만한 삶되시길....^^
한 특정 상품에 대해서이고 서브 쿼리 가능하다면

다른 방법도 잇을거 같은데요.

테이블 자료를 볼수가 없네요
SELECT in_code, max( in_pumno ) , max( in_dcno ) , max( in_vendor ) , SUM( in_amount ) AS sum_in_amount, ifnull( (

SELECT sum( pr_amount )
FROM pr_table
WHERE pr_pumno = a.in_pumno
AND pr_code = a.in_code
GROUP BY pr_code ) , 0
) AS sum_pr_amount, (
SUM( in_amount ) - ifnull( (

SELECT sum( pr_amount )
FROM pr_table
WHERE pr_pumno = a.in_pumno
AND pr_code = a.in_code
GROUP BY pr_code ) , 0
)
) AS remain_amount
FROM `in_table` a
WHERE `in_pumno` = '2005173-2'
GROUP BY `in_code` ASC

속도는 아주 잘나오는데 맞는 데이타 인지는 모르겟네요
감사합니다. 그런데 붙여넣고 쿼리 실행하니까 에러가 나는데요.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

버전이 낮아서 그런걸까요? 4.1.14 버전입니다.
inline subquery는 아마 4.1에서는 제공되지 않는듯합니다.
explain 을 해보니 관리자님 쿼리랑 결과가 비슷합니다.
아마 속도도 비슷할것 같습니다.
mysql에서 inline subquery가 되는줄 처음 알았습니다.
oracle이 mysql 인수하더니 좋은게 많아지네요.
컴대장님께//
in_code 와 pr_code 가 고유키인가요? (pk or unique)
쿼리 결과에서 건수가 동일하길래 유니크한것 같았는데.. 스키마엔 index만 적용되어 있네요.
똥산너구리님 말대로 in_code가 고유키가 아니면, n:n 으로 join 되는 상황이 생기면 결과가 틀려지게 됩니다. 고유키가 아닌 경우에는 join 해서는 안됨.
유니크 맞습니다. 그렇다면 키 타입을 인덱스가 아닌 유니크로 설정해야 하나요?
저는 인덱스나 유니크나 별반 차이가 없는 줄 알았는데..
예전에는 UNIQUE KEY로 설정했는데 이번에 인덱스로 바꾸어 버렸네요..ㅎ
댓글수가 많네요 ㅎㅎ
관건은 mysql 4.대 초반에서 되야 한다는건가요?

정확하게 나올려면
관계나 필드값의 설명 중복 여부 등등히 확실해야 겟죠.
In_table in_code는 유니크구요  pr_table pr_code는 중복코드입니다. 즉 한번들어와서 나갈때는 나누어 출고가 이루어지는식이죠. 행복한밤되세요^^
아시다시피 1:n관계겠죠. 저번에 채택한쿼리로 금일 운영해봤는데 좋다고하네요. 그리고 품번이 없을때는 Join left가 엄청빠르네요. 에고 머리야....
이미 운영중인 프로그램이라..그러기도 힘드네요..^^
일단 여러분들이 도와주신 덕분에 검색 속도가 만족할만한 수준까지 나온다고 합니다.
입고수량이 많은 데이터인 경우 출고 횟수도 많기 때문에 검색속도가 느릴뿐이지,
한번 입고에 100번 민만의 출고가 이루어지는 품목은 금방 검색되니까,
문제가 없을듯 합니다.
다시한번 관심가지고 도와주신 분들께 감사드립니다.^^
© SIRSOFT
현재 페이지 제일 처음으로