안녕하세요~
매일 좋은 정보만 얻어가다 처음으로 글을 쓰게 되었습니다~
궁금사항은
SQL 즉 Select 를 할때나 테이블 조회를 할때
Select는 where 조건이 더 많아 지거나
테이블 조회를 할 때 조회 조건을 필드 하나를 더 추가 하여 조회를 하면
제가 알기론 더 빠른 시간에 조회가 되는걸로 생각 되어 집니다..
하지만..꼭 그렇지 않다는 점에..놀라워서 이렇게 질문을 하게 되었습니다..
예를 들면,
테이블은 mkpf 와 mseg 조인 뷰입니다~
조회 조건에 matnr을 기입하고 조회를 하면 기입하지 않고 조회 할 떄보다
시간이 비교 할 수 없을 정도로 느려지게 됩니다..
아시는 분들은 저에게 해답을 주시기 바랍니다..
1. 왜 조회 조건이 많아 짐에도 더 느려지는지..
2. 그럼 해결방법은 없는지..(matnr 필드를 꼭 써야만 합니다..)
SELECT budat bwart zeile matnr werks lgort
shkzg menge meins umlgo aufnr
INTO CORRESPONDING FIELDS OF TABLE atab
FROM mkpf AS a INNER JOIN mseg AS b
ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr
WHERE budat IN s_budat
AND bwart IN ('311', '312', '261', '262')
AND matnr IN s_matnr
AND lgort IN s_lgort
AND umlgo IN s_umlgo
AND bwart IN s_bwart.
댓글 3
-
요요
2010.03.04 22:25
-
無念군
2010.03.04 22:59
요요님 말슴 처럼 ..
조건이 추가 된다고 해서.. 무조건 적으로 더 빠른것은 아닙니다 ..
DataBase 상의 index 체계에 따라서 .. 추가로 적은 where 절이 더 느린 쪽으로 .. 검색을 하게 끔 작용할 수도 있습니다 ..
( 해당 SQL 상의 where 절에 만족하는 값을 찾기 위해 DataBase 내에서 작업을 할테니깐욤.. )
비일비제하게 검색되는 구문이라면.. 신규 index를 추가해 보심은 어떠실지요..
index를 추가할수 없다라면,
%_HINTS ORACLE '...... ' (oracle database 상의 index중 내가 태우고푼 index를 강제로 태우는 방법 중에 한가지)
위 구문은 확실히 DB내역을 알고 있을 경우 가장 빠른 index를 강제로 태우는 방법이니 .. 주의 하시길..
(주변의 선배 분이나 튜닝하시는 분에게 부탁 드리는것도 방법일 수 있습니다 .)
-
갈매기
2010.03.07 21:59
SAP에서 기본적으로 제공하는 MSEG 인덱스 중 하나가 아래와 같습니다.
MANDT
MATNR
WERKS
LGORT
BWART
SOBKZ
상기 쿼리에서 더 빠르게 해주시려면 플랜트 넣어주시고
조인 거셨으니 A~bwart 인지 b~bwart 인지 넣어주세요.
두개의 테이블에 동일 필드가 있으면 쿼리가 버벅거리는 경향이 있더라구요.
조회 조건 많고 적은것이 문제가 아니라 인덱스가 어떻게 되어 있느냐에 따라 달라질 것 같네요.
위의 두 테이블 mkpf, mseg 는 회사마다 설정되는 index가 다 다르고 다양하게 있어서
사용처에 따른 조건을 분석하여 거기에 맞게 적절하게 index가 잡혀있는지를 먼저 검토해 보셔야
할 것 같습니다. 데이터 분포도 분석해야 하구요. 보통 위 조건에 대한 인덱스는 잡혀있는 것으로 알고 있는데요
그래도 느리시다면 튜닝 관련자분께 여쭤보심이 좋으실 것 같네요.