2009-09-20 4 views
0

약 690 만 개의 레코드가있는 상당히 큰 데이터베이스를 구축하고 있습니다.SQL에서 인덱스를 활용하는 방법

는 간단한 선택 6-7 초 복용, 그래서 지금은 최적화 및 기타 옵션을 조사 중이 야.

분명히 하나 또는 두 개의 색인을 만드는 것입니다.

샘플 :

것은 "TABLE_NAME"잘 작동 (COLUMN_NAME)

인덱스 'INDEX_NAME "을 작성하십시오.

그러나 select 문에서 인덱스를 사용하려면 유효한 SQL 구문을 가져올 수 없습니다. 하나는 "select index_name from table_name"을 사용할 수 있다고 가정합니다. 물론 적어도 그랬습니다. 그러나 그것은 유효하지 않은 것처럼 보입니다. 그리고 저의 삶은 그물에있는 예제를 발견 할 수 없습니다. 잘못된 각도로 완전히, 또는 아무도 인덱스를 사용하는 방법에 어떤 도움을 주시면 감사하겠습니다

... 그것을 문서화 없다!

+0

당신이 테이블에있는 기본 키가 있습니까? 그렇게하면 기본 키가 테이블에 클러스터형 인덱스를 만듭니다. 그리고 테이블에 다른 고유 인덱스가 있으면 테이블에 클러스터되지 않은 인덱스가 만들어집니다. 색인 된 필드의 크기가 성능에 영향을 미치게됩니다. 크기가 작을수록 데이터 페이지의 실제 데이터 행에 영향을 미치기 때문에 검색이나 조인이 더 빠릅니다. – Nirlep

답변

4

당신은 명시 적으로 데이터베이스를 사용하려는 인덱스를 지정하지 않아도 도움이

희망. 데이터베이스 옵티마이 저는 쿼리에 응답하기 위해 사용 가능한 인덱스와 알고리즘에 대해 알고있는 것을 살펴보고 (당연히) 작업중인 작업에 대한 최상의 계획을 선택합니다.

이전과 같이 테이블에서 선택하면됩니다. 데이터베이스는 자동으로 "올바른 일을 할 것"입니다.

옵티마이 저는 가장 숙련 된 개발자라도 약간 불투명하기 때문에 쿼리를 개발할 때 옵티 마이저에 대해 생성 된 "실행 계획"을 살펴 보는 것이 중요합니다. 데이터베이스의 EXPLAIN 명령을 사용하여 계획을 볼 수 있습니다.

올바른 색인을 설정하는 기술이 있습니다. 다음은 MySQL 데이터베이스에서 특정 종류의 선택에 가장 적합한 알고리즘과 인덱스 조합을 보여주는 최근 예제입니다. http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/ 이것은 현재 당신에게 유용하기에는 너무 진보되어 있지만, 옵티마이 저가 당신을 위해 알아 내려고 시도하는 것들의 종류.

0

나는 당신이 사용 dstabase의 종류에 있지만, SQL 서버 (2000, 2005, 2008) 정말 인덱스 이름에 대해 걱정할 필요가 없습니다 내 경험을 의존하는 것 같아요. 쿼리의 필터 (WHERE 절 또는 조인)로 자주 사용하는 열에서 쿼리를 만든 다음 쿼리를 정상적으로 수행하면됩니다. 데이터베이스 서 v는 도움이 될 수 있다고 생각할 때마다 색인을 사용하도록주의를 기울일 것입니다.

희망이 당신이 색인이 어떻게 작동하는지 이해 생각하지 않는다

1

하는 데 도움이됩니다. 인덱싱 된 열에서 선택을 수행하는 것과 같은 방법으로 인덱싱 된 열을 선택합니다.

0

데이터베이스는 사용자가 말하지 않고 색인을 사용합니다. 이것이 조회 Optimizer가 수행 할 것입니다.

쿼리 계획에서

봐 - 인덱스가 당신이 이상한 경우에

를 사용하는 경우이 표시됩니다

선택 에 사이베이스와 SQL 서버 운영 체제 세트 실행 계획 예를 들어 ..... 인덱스를 강제 할 필요가 있지만, 이것은 드문

2

SQL 서버 사용자가 작성한 쿼리의 가장 좋은 것이다 인덱스 dertermine 위해 노력할 것입니다. 이것은 다양한 지표에 대한 통계 자료의 도움을 받아 이루어질 것입니다.

또한 당신은 커버링 인덱스를 호출되어 뭔가 이잖아 만들 수 있습니다 (당신은 테이블 당 두 개 이상의 인덱스를 가질 수 있지만, 당신은 당신이 만드는 인덱스의 수를 제한해야합니다). 그것은 쿼리에 대한 모든 필드를 포함하는 인덱스입니다. 이렇게하면 SQL Server는 인덱싱하는 테이블이 아니라 인덱스 만 쿼리 할 수 ​​있습니다.

SQL Server에서 한 인덱스를 다른 인덱스보다 우선적으로 사용하도록 쿼리 힌트를 만들 수 있지만 해당 옵션을 사용하지 말고 인덱스에서 인덱스를 최신 상태로 유지할 수도 있습니다.

2

MySQL을 사용하는 경우 사용할 색인을 지정하거나 사용할 수 없습니다.

SELECT * FROM table1 USE INDEX (col1_index,col2_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

SELECT * FROM table1 IGNORE INDEX (col3_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

당신은 여기서 더 많은 정보를 찾을 수 있습니다 : http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

워렌 브라이언 노 로냐을

관련 문제