2010-03-16 4 views
1

I는 다음과 같습니다 의견이라는 MySQL의 테이블이 있습니다MySQL의 최적화

commentID parentID type userID date comment 

commentID가 기본 키로 설정되어 있지만, 대부분의 시간은 내가 parentID를 사용하여 데이터를 가져옵니다. 색인을 어떻게 설정해야합니까?

parentID에 인덱스를 추가하고 commentID를 기본 키로 지정해야합니까?

편집 : 3 개의 색인을 갖는 것이 좋지 않습니까? 예를 들어 categoryID와 topicID가있는 포럼 테이블에서?

+2

예. parentID를 색인으로 추가해야합니다. –

+0

고맙습니다.이 멍청한 질문에 사과드립니다. – Jens

답변

1

select * from comments where parent_id = ... order by date desc 또는 이와 비슷한 검색어를 사용하는 경우 (기본 키 외에) (parent_id, 날짜)에 대한 색인을 생성해야합니다.이 색인은 두 개의 열을 넘는 단일 색인입니다. 인덱스의 첫 번째 부분은 where 절에서 사용되고 두 번째 부분은 필터링 된 항목의 순서가 올바른지 확인하므로 시간이 많이 소요되는 정렬이 필요하지 않습니다.

기본 키에만 색인을 생성 할 필요는 없습니다. 기본 키는 내부 저장 용으로 이미 매우 빠르게 사용됩니다. 당신은 조인 (join)을 위해 그것을 자주 필요로 할 것입니다.

단일 테이블에 많은 인덱스를 추가 할 수 있지만 인덱스를 사용하면 업데이트 또는 삭제 시간이 느려집니다. 따라서 테이블 당 최대 4-5 개의 인덱스 만 사용해야합니다.

0

기본적으로 인덱스가 많을 때 나쁜 점은 인덱스 트리를 변경하기 때문에 INSERT, UPDATE 및 DELETE 작업이 느려지지만 인덱스를 사용하면 SELECT가 더 빠릅니다.

내가 감당할 수 없다면 나쁘지 않다고 생각합니다.