2011-10-25 10 views
0

인덱스와 관련하여 질문이 있습니다.이 쿼리에 인덱스를 사용해야합니까?

고객 테이블에서 CID에 대한 인덱스를 사용하고 있습니다. 이유는이 테이블을 쿼리하고 있으며 예약 테이블에 가입하고 있기 때문입니다.

스키마 예약 테이블

Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
BID          NOT NULL NUMBER(16) 
CID            NUMBER(16) 
FNO            NUMBER(16) 
OID            NUMBER(16) 
SEAT            NUMBER(6) 
SEAT_PRICE           NUMBER(6) 
FLIGHT_DATE          DATE 

고객

CID          NOT NULL NUMBER(16) 
FIRSTNAME         NOT NULL VARCHAR2(10) 
LASTNAME         NOT NULL VARCHAR2(10) 
STREET         NOT NULL VARCHAR2(20) 
TOWN          NOT NULL VARCHAR2(10) 

쿼리

SELECT bo.bid, cu.cid 
FROM ass2master_booking bo, ass2master_customer cu 
WHERE bo.cid = cu.cid and rownum < 135000; 

내 질문은 : 그것은 정말 인덱스 t을 추가 여부를 어떤 차이가 않습니다 쿼리를 참조하여 CID?

내가 가입했기 때문에 그것을 추가했습니다.

나는 (인덱스 제외) 구조화되지 않은 데이터와이 쿼리를 테스트하고이 CPU의 유의 한 감소는 없지만 추적 파일의 디스크 열이 인덱스 1800했다 (337)

구조화되지 않은 디스크 1800에서 드롭을 가지고 그 337

색인에 의해 고객 테이블에서 빠른 전체 검사가 수행됩니다.

+2

죄송합니다 ... 저는 저항 할 수 없습니다. .Ass2Master? AssMaster는 어디 있습니까? 아, 약어가 잘못 됐어! –

+1

암시 적 구문을 사용하는 SQL 반 패턴입니다. – HLGEM

답변

2

성능이 향상되면 대답은 '예'입니다.

색인을 추가하기 만하면 색인을 추가하지 마십시오. 테스트하기 쉽습니다. 인덱싱 된 쿼리가 빠르거나 빠릅니다. 인덱스는 삽입 중에 테이블 속도를 저하시킵니다. 따라서 특정 데이터 및 성능 요구를 파악해야합니다.

1

1) 다소 혼란스러운 CUSTOMER 테이블의 CID 열이 표시되지 않습니다. 아마도 쿼리가 FNO 열을 참조하려고했거나 명령의 출력에서 ​​우연히 중단 한 CID 열이있을 수 있습니다.

2) 테이블에 몇 개의 행이 있습니까? 임의의 135,000 행을 가져오고 의미있는 술어가 없으므로 오라클이 테이블을 스캔하지 않고 인덱스를 스캔 할 수 있도록 커버 리지 인덱스 이외의 인덱스가 특히 유용하지는 않습니다. 그러나 그 장점은 SELECT 목록에 추가 열을 추가해야하는 경우 사라집니다.

3) 질문을 올린 후 내 질문에 CUSTOMER 테이블에 가입하는 것이 명확하지 않습니다. BOOKINGBIDCID을 가지므로 참여가 도움이되는 것으로 보이지 않습니다. 아마도 CUSTOMER 테이블에 가입하여 SELECT 목록에 열을 추가 할 수 있습니다. 그렇다면 커버 링 인덱스의 이점이 손실 될 수 있습니다 (물론 인덱스에 추가 열을 추가하지 않는 한)

+0

안녕하세요. 고객 표를 업데이트했습니다. 나는 미안한 표를 잘못 제공했다. – paktrick

관련 문제