2009-09-03 4 views
1

데이터베이스 성능을 최적화하기 위해 인덱스를 읽었으며 인덱스 적용 측면에서 다양한 데이터베이스 상황에 대한 모범 사례를 수집하고자합니다.SQL Server - 인덱스를 유지 관리하는 가장 좋은 방법은 무엇입니까?

평범하지 않은 양의 테이블과 행을 사용하여 완전히 색인화되지 않은 데이터베이스를 사용하면 최대 성능을 얻기 위해 어떤 유형의 열에 어떤 색인이 적용되는지 결정할 때 어떤 규칙을 사용합니까? 어떤 쿼리를 사용하여 트릭을 분석합니까? 내가 가진 시작으로

: (http://asptutorials.net/SQL-Server/tutorial-on-indexes/에서) 송장의 테이블로 주 또는 "헤더"테이블의

  • 은 테이블의 기본 키에 클러스터 된 인덱스를 확인합니다.

  • "invoice_row"와 같은 2 차 또는 "세부 사항"테이블의 경우, 하위 레코드를 그룹화하는 외래 키 (이 예제에서는 "invoice_id")를 만드십시오. 이는 invoice_row 테이블의 쿼리 대부분이 invoice_row_id 순서가 아닌 invoice_id 순서로 수행되기 때문입니다.

  • 모든 테이블에 대해 테이블의 각 외래 키에 클러스터되지 않은 인덱스를 만듭니다. 이 시점에서 인덱스를 다루는 것에 신경 쓰지 마십시오. 테이블에서 수행 할 선택 쿼리에 대해 생각해보십시오. 어떤 종류의 "주문"명세서를 사용 하시겠습니까? 이러한 열에 클러스터되지 않은 인덱스를 만듭니다.

  • 이제 일반적인 쿼리의 타이밍을 시작하고 느린 쿼리를 찾아보십시오. 특히 느린 색인을 식별하는 경우 키가 아닌 별도의 열을 색인에 추가하여 해당 색인의 표지 색인이 될 수있는 방법이 있는지 확인하십시오.

다른 어떤 "엄지 손가락"을 수집 할 수 있습니까? 어떤 도구를 사용해야합니까?

+0

나는이, 중복 적어도 http://stackoverflow.com/questions/107132/what-columns-generally-make-good-indexes의 생각하지 않습니다. –

답변

3

필자는 필요한 인덱스를 만들려고 테스트 또는 프로덕션 환경에서 다음 스크립트를 사용하여 인덱스를 추가 조정합니다. 나는 또한 몇 가지 다른 절차를 가지고 있지만 이것은 좋은 출발점이다. 혼자서 최고의 순서를 선택해야한다는 것을 기억하십시오.

이 질문은 this question과 유사하며 색인을 조정하는 데 사용하는 다른 저장 프로 시저를 게시했습니다.

CREATE PROCEDURE [ADMIN].[spMissingIndexes] 
AS 
SELECT 
     mid.statement, 
     mid.equality_columns, 
     mid.inequality_columns, 
     mid.included_columns, 
     migs.user_seeks, 
     migs.user_scans, 
     migs.last_user_seek, 
     migs.avg_user_impact, 
     user_scans, 
     avg_total_user_cost, 
     avg_total_user_cost * avg_user_impact * (user_seeks + user_scans) AS [weight] 
FROM 
     sys.dm_db_missing_index_group_stats AS migs 
     INNER JOIN sys.dm_db_missing_index_groups AS mig 
     ON (migs.group_handle = mig.index_group_handle) 
     INNER JOIN sys.dm_db_missing_index_details AS mid 
     ON (mig.index_handle = mid.index_handle) 
ORDER BY 
     avg_total_user_cost * avg_user_impact * (user_seeks + user_scans) DESC ; 
GO 
1

기본 및 외래 키 색인을 정의한 후에는 데이터베이스의 트랜잭션 활동을 분석하여 적절한 색인 전략을 결정해야합니다.

  1. 누락 된 인덱스 Dynamic Management Views :

    SQL 서버는 실제로 여러 가지 방법을 통해 데이터베이스에 통합 할 수 있습니다 인덱스를 의미한다. 플랫폼에서 생성 된 실행 계획을 검토하여 인덱스 존재 여부에 따라 데이터베이스에서 누락 될 수있는 인덱스를 제안합니다.

  2. Database Engine Tuning Advisor. 워크로드 파일을 으로 작성한 후 권장 사항을 생성하려면 DTA를 통해 을 실행하여 SQL Server 추적을 작성하십시오.

정확하게 데이터베이스를 디자인하고 조정하기 위해 예상되는 트랜잭션 작업을 시뮬레이션하는 테스트를 수행하는 것이 좋습니다.

2

숫자 1 - SQL을 분석하십시오.

DB에서 던져지는 SQL을보고 어떤 인덱스가 유용 할 수 있는지 알아야합니다. 계획 분석기를 살펴 보는 것만으로는 필요한 것을 해결할 수 없습니다.

숫자 2 - 테이블 공간 스캔은 매우 좋은 경우가 많습니다! 테이블이 "작음"이거나 30 % 이상의 행에 액세스하는 경우 스캔이 가장 효율적인 액세스 경로입니다.

3 번 - 색인 생성 "작은"테이블은 무의미합니다.

숫자 4 - 색인은 검색에도 유용합니다. 일반적으로 인덱스는 인덱스 뒤에 값을 수집합니다. 종종 DB는 인덱스에서 값을 선택하고 실제 행을 검색하는 것을 방해하지 않습니다. 예 : 공통 SQL이 "select max (item_no) where invoice =?"인 경우 송장 및 item_no가 인 색인을 작성하면 실제 테이블에 대한 액세스없이 조회를 수행 할 수 있습니다.

"small"의 현재 값은 약 2000 행입니다.

빌드하는 모든 인덱스에 대해 INSERT에 심각한 성능 저하가 있음을 항상 기억하십시오.

관련 문제