고유 인덱스가 열 검색 성능에 더 좋습니까? (PGSQL & MySQL)
여부가 궁금합니다.
CREATE INDEX idx ON tbl (columns);
대.
CREATE UNIQUE INDEX idx ON tbl (columns);
Postgre에서 상당한 알고리즘 성능 이점이 있습니다.색인화된 열을 스캔할 때 SQL 또는 MySQL 구현 또는UNIQUE
키워드는 단순히 인덱스와 함께 고유한 제약 조건을 도입합니다.
인덱스가 내부적으로 일종의 해시(hash1)와 유사한 구조로 구현될 가능성이 높고 정의에 의한 충돌 처리가 O(1) 성능이 아닌 다른 결과를 초래하는 한 한계 이익이 있다고 말하는 것이 타당할 것이라고 생각합니다.이 전제를 고려할 때, 많은 비율의 값이 동일한 경우 구조가 선형으로 퇴화될 가능성이 있습니다.
따라서 제 질문을 위해 값의 분포가 비교적 이산적이고 균일하다고 가정합니다.
미리 감사드립니다!
1 저는 RDBM 내부에 대해 잘 모르기 때문에 이것은 순전히 추측의 문제입니다.
데이터가 고유한 경우 다음을 생성해야 합니다.UNIQUE
그것들을 색인합니다.
이는 추가적인 오버헤드를 의미하지 않으며 특정한 경우에 최적화자의 결정에 영향을 미쳐 더 나은 알고리즘을 선택할 수 있습니다.
인SQL Server
그리고 안에PostgreSQL
, 예를 들어, 만약 당신이 a를 분류한다면.UNIQUE
key, optimizer는 다음을 무시합니다.ORDER BY
(관련이 없으므로) 그 이후에 사용되는 절, 즉 이 쿼리:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
에 색인을 사용할 것입니다.col_unique
그리고 분류하지 않을 것입니다.other_col
쓸모가 없으니까요
이 쿼리:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
또한 그것은 a로 변환될 것입니다.INNER JOIN
(A와는 반대로)SEMI JOIN
) 있는 경우UNIQUE
색인을 보다othertable.othercol
.
인덱스에는 항상 행에 대한 포인터가 포함됩니다(ctid
인에PostgreSQL
, 행 포인터 입력MyISAM
, 기본 키/유격화기InnoDB
) 및 잎은 이 포인터에 따라 순서가 정해지므로 실제로 모든 색인 잎은 어떤 식으로든 고유합니다(분명하지 않을 수도 있습니다.
성능에 대한 자세한 내용은 블로그에서 이 기사를 참조하십시오.
업데이트/삽입 작업 중에 고유한 제약 조건을 가질 경우 약간의 불이익이 발생합니다.삽입/업데이트 작업 전에 검색하여 고유성 제약 조건을 위반하지 않았는지 확인해야 합니다.
보통 인덱스는 해시가 아닌 B-Tree입니다. 해시 기반 인덱스가 있지만 가장 일반적인 인덱스(적어도 Postgre에서는).SQL)은 B Tree)를 기반으로 합니다.
속도는 - 고유해야 함 - 인덱스 검색이 지정된 값을 가진 행을 찾을 때 이 값을 가진 다른 행이 있는지 검색할 필요가 없으며 즉시 검색을 완료할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1293499/are-unique-indexes-better-for-column-search-performance-pgsql-mysql
'it-source' 카테고리의 다른 글
JAXB : 모든 요소에 네임스페이스 접두사 필요 (0) | 2023.10.08 |
---|---|
기본값으로 주식을 관리하도록 우커머스 가져오기 (0) | 2023.10.08 |
파워셸에서 내장된 별칭을 제거하거나 교체하려면 어떻게 해야 합니까? (0) | 2023.10.08 |
"표 1 왼쪽 조인 표 2"와 "표 2 오른쪽 조인 표 1"은 서로 교환할 수 있습니까? (0) | 2023.10.08 |
도커 이미지의 sha256 코드는 어디서 찾을 수 있습니까? (0) | 2023.10.08 |