2017-09-08 8 views
0

Props에는 이미 'CreatedOn'열에 non-clustered index이 있지만이 인덱스는 크게 개선하지 않기 위해 필요한 다른 특정 열은 include입니다. 자주 실행되는 쿼리의 쿼리 성능.기존 비 클러스터형 인덱스에 열을 포함하거나 클러스터되지 않은 인덱스를 새로 추가하십시오.

이 문제를 해결하는 것이 가장 좋습니다.

    1.

    은 추가 비 클러스터에 포함 된 열이있는 인덱스 또는
    2. 포함 된 열로 다른 열을 추가 할 수있는 기존의 인덱스를 변경을 만들? 또한

:

    - 어떻게 내 결정은 현재 클러스터되지 않은 인덱스를 사용하는 다른 쿼리의 성능에 영향을 미칠 것인가?
    - 포함 된 열을 추가하기 위해 기존 색인을 삭제하고 다시 만들거나 변경해야하는 경우 가장 좋으면 어떻게해야합니까?
    CREATE TABLE dbo.Props(
        PropID int NOT NULL, 
        Reference nchar(10) NULL, 
        CustomerID int NULL, 
        SecondCustomerID int NULL, 
        PropStatus smallint NOT NULL, 
        StatusLastChanged datetime NULL, 
        PropType smallint NULL, 
        CreatedOn datetime NULL, 
        CreatedBy int NULL 
    CONSTRAINT PK_Props PRIMARY KEY CLUSTERED 
    (
        PropID ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
    ) ON [PRIMARY] 
    GO 
    

    현재 인덱스

    :

테이블의 단순화 된 버전은 문제의 인덱스와 함께 아래에있는 신규 또는 변경 인덱스에 필요한 열

CREATE NONCLUSTERED INDEX idx_CreatedOn ON dbo.Props 
(
    CreatedOn ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
GO 

모든 5가; foreign key 열, smallint 및 int, nullable 및 nullable의 혼합.

예에서 include의 열은 CustomerID, SecondCustomerID, PropStatus, PropType 및 CreatedBy입니다. 언제나처럼 ... 그것은 달려

답변

2

... 중복 인덱스를 갖는 일반적으로

은 바람직하지 않다. 따라서 다른 정보가 없으면 포함 된 열을 추가하는 것이 더 좋습니다.이를 포함 인덱스로 사용하는 것이 좋습니다.

원래의 색인은 다른 "빈도 높은"검색어로 작성되었을 가능성이 높습니다 ... 이제는 날씨를 결정해야합니다. 그렇지 않으면 증가한 색인 페이지 수가 색인을 사용하는 기존 검색어에 악영향을 미치게됩니다. 그것은 현재의 상태입니다.

나머지 쿼리와 관련하여 키 조회를 수행하는 데 드는 비용을 살펴볼 수도 있습니다. 전체 비용 중 사소한 부분에서 키 조회 만 수행하면 성능 향상으로 인해 더 큰 색인을 유지 관리하는 비용이 상쇄되지는 않습니다.