인덱스 관련 몇가지 질문 0 5 4,079

by 박진규 [Oracle Tuning] 인덱스 마법사 프로필러 include count [2010.11.02 18:10:13]


안녕하세요, 늘 도움 많이 받고 있습니다.
오늘도 오라클 인덱스에 대해 몇가지 도움 받았으면 해서 올립니다.

OS 는 centos5.5(windows server 2003 을 쓰기도 합니다.)
오라클은 10g XE 를 씁니다.

튜닝 대상은 다음 테이블이라고 할게요.
CREATE TABLE Persons 
(
    id NUMBER NOT NULL,
    lastName NVARCHAR2(50) NOT NULL,
    fistName NVARCHAR2(50) NOT NULL,
    size NUMBER NOT NULL,
    PRIMARY KEY(id)
)

id 는 순차적으로 증가하는 고유키고, 식별자로서의 역할 외에 다른 역할은 없습니다.

1. count(*) vs count(PK) 

다음 각 상황에 대해 레코드 수를 세기 위한 쿼리인
SELECT count(*) FROM Persons ... 에서 count(*) 와 count(id) 중 어느것이 빠를까요?

a. 조건절이 없고 PK 외 인덱스가 없을때
b. 조건절이 있고 PK 외 인덱스가 없을때
c. 조건절이 있고 조건절에 대한 인덱스가 있을때


2. 조회용 컬럼에 인덱스

튜닝하고 싶은 쿼리는 다음 두개입니다.

SELECT
 size
FROM Persons
WHERE lastName = 'Goo' AND firstName = 'Hara'

UPDATE Persons
SET size = size + 2
WHERE lastName = 'Goo' AND firstName = 'Hara'

성이 같은 경우가 많을테니 lastName, firstName 순으로 인덱스로 걸고 
SQL Server 라면 조회용 컬럼인 size 를 include 로 다음처럼 추가해줄텐데요..
CREATE NONCLUSTERED INDEX IX_Persons ON Persons 
(lastName, firstName) INCLUDE (size)
오라클에선 어떻게 하는게 좋을까요? 


3. 인덱스 마법사? 프로필러?
SQL Server 의 인덱스 튜닝 마법사(관리자) 같은 툴이 오라클에도 있나요?
특정 쿼리에 대한 권정 인덱스 구성이 뭔지 확인 할 수 있어 상당히 요긴하게 썼었는데..
부하를 유발하는 넘이 뭔지 프로필러 같은거로 확인 하고 싶은데 없는 거 같에서
그냥 웹어드민에서 최상위SQL인가요? 그걸로 대충 확인하고 있습니다만..
정석이 따로 있는지 궁금해서요.


읽어주셔서 감사합니다~
by 마농 [2010.11.03 08:08:49]
1-a : 같다.(둘다 index_ffs 를 탄다고 가정)
1-b : 같다.(아마 같을 것이다. 차이가 조금 난다고 해도 체감할 수 없을 것이다.)
1-c : count(id)가 느리다.
count(*)는 인덱스 스캔만으로 끝나지만 count(id)는 id를 읽기 위해 테이블스캔을 해야 한다.

by 마농 [2010.11.03 08:11:52]
2. 어차피 두개 항목의 결합인덱스를 만들었고
그 두개 항목을 모두 이퀄 조건으로 주었다면
인덱스 스캔의 효과가 클텐데 굳이 다른 조치가 필요할까요?

by 마농 [2010.11.03 08:18:18]
3. [자동 튜닝 옵티마이저] 가 원하시는 것일런지?
http://wiki.gurubee.net/pages/viewpage.action?pageId=6259450

by 타락천사 [2010.11.03 08:39:03]
3.은 advisor 라는 기능이 10G 부터 지원되고 있습니다.
실상을 거의 안쓰더라구요..
EM 있으시면 관리 메뉴를 통해서 쉽게 진단 받으실수 있습니다.

by 박진규 [2010.11.03 14:50:26]
마농님, 타락천사님 답변 감사드립니다. 덕분에 또 많이 도움받았네요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입