행의 특정 하위 집합이 읽기에 훨씬 더 많은 테이블이 있다고 가정 해 보겠습니다. people
테이블에 is_alive
플래그가있는 것과 같습니다. 또는 소프트/논리적 삭제를 구현하는 경우 검색 기준에 항상 is_deleted = 0
이 포함됩니다.하위 카디널리티 플래그를 인덱싱해야합니까?
이러한 필드는 이러한 테이블의 색인에 포함되어야합니까? 그렇다면, 그들은 더 왼쪽 또는 더 오른쪽해야합니까?
자신이하지 않는 낮은 카디널리티/의미가
people [ last_name ]
people [ zip_code ]
people [ gender ]
widgets [ category_id ]
widgets [ seller_id ]
는 당신이 그 (것)들을
people [ last_name, is_alive ]
widgets [ category_id, is_valid ]
또는
people [ is_alive, last_name ]
widgets [ is_valid, category_id ]
부울처럼 보이게 마 ...의 당신이 같은 인덱스가 있다고 가정 해 봅시다 그들은 다른 검색 기준과 쌍을 이룹니다.
거의 항상 매번 사용되지만 모든 색인에이 필드를 추가하는 것만으로도 기분이 상쾌합니다. 어쩌면 그 자체가 "문제"입니까? 행이 동일한 스키마가있는 다른 테이블로 셔틀해야합니까? 기본적으로 플래그를 분할합니다.
벤더 무신론자.
'performance'와'Vendor Agnostic'을 함께 사용하지 마십시오. ** EVER ** for SQL. 얼마나 효율적인가는 해당 공급 업체의 구현에 100 % 의존합니다. – JNK
+1 @JNK ... SQL Server에 대한이 질문에 대한 대답을 드릴 수는 있지만 대답은 SQL Server에만 해당됩니다. –
@JNK 지점을 찍었지만 이론/규칙을 더 찾고있었습니다. 사례별로 적용 할 수있는 엄지 손가락 –