2012-03-21 3 views
2

SQL Server 백엔드에서 django를 사용하고 있습니다.Django로 클러스터 된 인덱스 선택

일부 테이블이 매우 커집니다. 일반화 촬영 예 :

CREATE TABLE [dbo].[Data](
    [id] [int] NOT NULL, 
    [project_id] [int] NOT NULL, 
    [timestamp] [datetime] NOT NULL, 
    [value] [float]) 
[Data].[project_id]

하면 [Project].[id]에 외래 키이다.

[Task].[id]에 나는 PK 인덱스가 있으며, 장고 연습과 함께 자동 증분됩니다.

또한 중복 데이터를 방지하기 위해 [Data].[project_id],[Data].[timestamp]에 고유 색인이 있습니다.

대다수의 쿼리가 [Data].[project_id],[Data].[timestamp]에서 검색되는 경우이 인덱스를 클러스터 된 인덱스로 만드는 것이 가장 좋습니까? 아니면 django가 db와 상호 작용하는 방식으로 클러스터링을 기본 키에 남겨 두어야합니까?

감사합니다.

답변

0

당신은 당신의 쿼리의 대부분은이

  • 클러스터되지 않은 인덱스에 대한 필요성이있을 나타나지 않습니다 추구 클러스터 된 인덱스에 의해 성취 될 수 PROJECT_ID에 고유 클러스터 된 인덱스, 타임 스탬프

    • 을 만든 경우
    • 당신은 이미 당신이 특정 날짜에 의해 추구하는 경우 타임 스탬프를 사용하여

    는 PROJECT_ID 유효한 인수 될 색인 계획하고 있지만 대부분의 사람들은 날짜를 범위로 질의합니다. 그러면 날짜 범위를 찾을 수 있지만 그 데이터를 스캔하여 project_id를 찾아야합니다. SQL Server는 Seek Predicate로 timestamp를 사용하고 Predicate로 project_id를 사용하여이를 seek로 표시합니다. 당신의 목표는 Seek Predicate에서 가능한 많이 처리해야한다는 것입니다.

    그러나 이것은 완벽한 대답이라고 말하기 어렵습니다. 이것이 옳은지 알 수있는 유일한 방법은 며칠을 기다린 후 dm_db_index_usage_stats를 점검하여 사실이 테이블의 대부분의 사용이 실제로 project_id, timestamp에 있는지 확인하는 것입니다. 장고가 기대하고있는 것보다 다르게 사용한다면 단순히 ID로 바꾸는 것이 좋습니다.

  • 관련 문제