PostgreSQL의 발견 여정
Postgres에는 여러 가지 인덱스 유형이 있으며 새 버전마다 새로운 인덱스 유형이 추가되는 것 같습니다. 각 인덱스 유형은 유용하지만 사용할 유형은 (1) 데이터 유형, 경우에 따라 (2) 테이블의 기본 데이터 및 (3) 수행되는 조회 유형에 따라 달라집니다. 다음 내용에서는 Postgres에서 사용할 수 있는 인덱스 유형과 어떤 인덱스 유형을 사용해야 하는지 소개합니다. 시작하기 전에 안내할 인덱스 유형 목록은 다음과 같습니다.
B-트리
일반화 역지수(GIN)
일반화된 역해석 트리(GiST)
공간 분할 GiST(SP-GiST)
블록 범위 지수(BRIN)
해시
이제 인덱싱을 시작해 보겠습니다.
컴퓨터공학 학위가 있다면 B-Tree 인덱싱을 가장 먼저 배울 수 있습니다. B-트리 인덱스는 항상 균형을 유지하는 트리를 만듭니다. 인덱스를 기반으로 무언가를 찾을 때 트리를 탐색하여 키를 찾고 찾고 있는 데이터를 반환합니다. 인덱스를 사용하면 수천 개의 레코드를 순차적으로 스캔하는 것과 달리 몇 페이지(몇 개의 레코드만 반환하는 경우)만 읽으면 되므로 순차 스캔보다 훨씬 빠릅니다.
표준 CREATE INDEX 문을 실행하면 B-트리 인덱스가 생성됩니다. B-트리 인덱스는 텍스트, 숫자, 타임스탬프 등 대부분의 데이터 유형에 유용합니다. 데이터베이스에서 인덱스를 처음 사용하고 데이터베이스에서 Postgres의 고급 기능을 너무 많이 사용하지 않는 경우 표준 B-Tree 인덱스를 사용하는 것이 아마도 최선의 선택일 것입니다.
다중 값 열의 GIN 인덱스일반적으로 GIN이라고 불리는 Generalized Inverted Index는 단일 열에 여러 값이 포함된 데이터 유형에 가장 적합합니다.
Postgres 문서에 따르면:
"GIN은 색인화되는 항목이 복합 값이고 색인에 의해 처리되는 쿼리가 복합 항목에서 발생하는 값을 검색해야 하는 상황을 처리하도록 설계되었습니다. 예를 들어 이 항목은 문서일 수 있고 쿼리는 문서에 포함된 특정 문자를 검색할 수 있습니다.”
이 범위에 포함된 가장 일반적인 데이터 유형은 다음과 같습니다.
h스토어
배열
범위
JSONB
GIN 인덱스의 가장 만족스러운 점 중 하나는 복합 값에 저장된 데이터를 이해하는 능력입니다. 그러나 GIN 인덱스에는 추가되는 각 개별 유형의 데이터 구조에 대한 특정 지식이 필요하므로 모든 데이터 유형이 GIN 인덱스에서 지원되는 것은 아닙니다.
GiST(Generalized Inverted Seach Tree) 인덱스는 데이터가 동일한 열에 있는 다른 데이터 행과 겹칠 때 가장 적합합니다. GiST 인덱스를 가장 잘 활용하는 방법은 기하학 데이터 유형을 선언하고 두 개의 다각형에 몇 개의 점이 포함되어 있는지 알고 싶은 경우입니다. 어떤 경우에는 특정 점이 상자에 포함될 수 있지만 동시에 다른 점은 다각형에만 존재할 수 있습니다. GiST를 사용하여 색인화되는 일반적인 데이터 유형은 다음과 같습니다.
기하학 유형
전체 텍스트 검색이 필요한 텍스트 유형
GiST 인덱스 크기에는 고정된 제한이 많이 있습니다. 그렇지 않으면 GiST 인덱스가 극도로 커질 수 있습니다. 그 대가로 GiST 인덱스는 손실이 있습니다(부정확).
공식 문서에 따르면:
"GiST 인덱스는 손실이 있습니다. 즉, 인덱스가 잘못된 일치를 생성할 수 있으므로 잘못된 일치를 제거하기 위해 실제 테이블 행을 확인해야 합니다. (PostgreSQL은 필요할 때 자동으로 이 작업을 수행합니다.)"
이것은 잘못된 결과를 얻게 된다는 의미가 아니라 Postgres가 데이터를 반환하기 전에 이러한 가짜 결과를 필터링하기 위해 약간의 추가 작업을 수행한다는 의미입니다.
특별 팁: GIN 및 GiST 인덱스는 종종 동일한 데이터 유형에 사용될 수 있습니다. 일반적으로 성능은 좋지만 디스크 공간을 많이 차지하며 그 반대의 경우도 마찬가지입니다. GIN과 GiST의 경우 모든 상황에 적용할 수 있는 일률적인 솔루션은 없지만 위의 규칙은 가장 일반적인 상황에 적용되어야 합니다.
더 큰 데이터를 위한 SP-GiST 인덱스SP-GiST(공간 분할 GiST) 인덱스는 Purdue Research의 공간 분할 트리를 채택했습니다. SP-GiST 인덱스는 데이터에 자연적인 클러스터링 요소가 있고 균형 트리가 아닌 경우에 자주 사용됩니다. 전화번호가 좋은 예입니다(적어도 미국 전화번호는 그렇습니다). 형식은 다음과 같습니다:
3자리 지역번호
3자리 프리픽스 번호(구 전화 교환기 관련)
4자리 줄번호
이는 첫 번째 세트의 처음 세 자리 숫자에 자연적인 클러스터링 요소가 있고 그 다음 세 자리 숫자의 두 번째 세트가 이어지며 숫자가 균등하게 분포된다는 것을 의미합니다. 그러나 전화번호의 일부 지역번호에서는 다른 지역보다 포화 상태가 더 높습니다. 그 결과 매우 불균형한 트리가 될 수 있습니다. 자연적인 집계 요소가 사전에 있고 데이터가 균등하게 분산되지 않기 때문에 전화번호와 같은 데이터는 SP-GiST에 좋은 사례가 될 수 있습니다.
BRIN(블록 범위 인덱스)은 SP-GiST와 같은 일부 상황에 중점을 두고 데이터에 자연스러운 순서가 있고 데이터 크기가 큰 경우에 가장 잘 사용됩니다. 연대순으로 10억 개의 레코드가 있는 경우 BRIN이 유용할 수 있습니다. 여러 우편번호와 같이 자연적으로 그룹화되는 대규모 데이터 세트를 쿼리하는 경우 BRIN은 유사한 우편번호가 디스크의 가까운 위치에 저장되어 있는지 확인하는 데 도움이 될 수 있습니다.
날짜나 우편번호별로 정렬된 매우 큰 데이터베이스가 있는 경우 BRIN 인덱스를 사용하면 일부 불필요한 데이터를 매우 빠르게 건너뛰거나 제외할 수 있습니다. 또한 BRIN 인덱스는 전체 데이터 크기에 비해 상대적으로 작으므로 데이터 세트가 클 경우 BRIN 인덱스가 더 나은 성능을 발휘할 수 있습니다.
해시 인덱스, 마침내 더 이상 충돌을 두려워하지 않습니다해시 인덱스는 수년 동안 Postgres에 사용되어 왔지만 Postgres 10이 출시될 때까지 해시 인덱스 사용에 대한 큰 주의 사항이 있었습니다. 이는 WAL 로그가 아니었습니다. 즉, 서버가 충돌하고 대기로 장애 조치할 수 없거나 예를 들어 wal-g를 사용하여 아카이브에서 복원할 수 없으면 다시 빌드할 때까지 해당 인덱스를 잃게 됩니다. Postgres 10이 출시되면서 이제 WAL에 기록되므로 다시 사용하는 것을 고려할 수 있지만 실제 질문은
입니다.해시 인덱스는 때때로 B-Tree 인덱스보다 빠른 조회를 제공하고 생성 속도도 빠릅니다. 가장 큰 문제는 "동등" 비교 작업에만 제한되어 있으므로 정확히 일치하는 조회에만 사용할 수 있다는 것입니다. 이로 인해 해시 인덱스는 일반적으로 사용되는 B-Tree 인덱스보다 유연성이 훨씬 떨어지므로 이를 대체물로 생각해서는 안 되며 특별한 경우를 위한 인덱스로 생각해야 합니다.
어떤 것을 사용해야 하나요?방금 많이 소개했는데 조금 겁이 나시면 정상입니다. 이전에 이것을 알고 있다면 CREATE INDEX는 항상 B-Tree를 사용하여 인덱스를 생성하며 좋은 소식은 Postgres 성능이 대부분의 데이터베이스에 대해 좋거나 매우 좋다는 것입니다. :) 더 많은 Postgres 기능 사용을 고려하고 있다면 다른 Postgres 인덱스 유형을 사용할 때의 치트 목록은 다음과 같습니다.
B-트리 - 대부분의 데이터 유형 및 쿼리에 적합
GIN - JSONB/hstore/배열용
GiST - 전체 텍스트 검색 및 기하학적 데이터 유형용
SP-GiST - 자연적인 집계 인자가 있지만 분포가 고르지 않은 대규모 데이터 세트에 적합합니다
BRIN - 순차적인 대규모 데이터 세트에 적합
해시 - 동등 연산에 적합하지만 일반적으로 B-Tree 인덱스만 있으면 됩니다.
이 기사에 대해 질문이나 피드백이 있으면 언제든지 Slack 채널에 참여해 주세요.
위 내용은 PostgreSQL의 발견 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









DeepSeek은 웹 버전과 공식 웹 사이트의 두 가지 액세스 방법을 제공하는 강력한 지능형 검색 및 분석 도구입니다. 웹 버전은 편리하고 효율적이며 설치없이 사용할 수 있습니다. 개인이든 회사 사용자이든, DeepSeek를 통해 대규모 데이터를 쉽게 얻고 분석하여 업무 효율성을 향상시키고 의사 결정을 지원하며 혁신을 촉진 할 수 있습니다.

Docker 컨테이너를 사용하여 사전 컴파일 된 패키지 (Windows 사용자의 경우)를 사용하여 소스 (숙련 된 개발자)를 컴파일하는 것을 포함하여 DeepSeek를 설치하는 방법에는 여러 가지가 있습니다. 공식 문서는 신중하게 문서를 작성하고 불필요한 문제를 피하기 위해 완전히 준비합니다.

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Bitget은 스팟 거래, 계약 거래 및 파생 상품을 포함한 다양한 거래 서비스를 제공하는 Cryptocurrency 교환입니다. 2018 년에 설립 된이 교환은 싱가포르에 본사를두고 있으며 사용자에게 안전하고 안정적인 거래 플랫폼을 제공하기 위해 노력하고 있습니다. Bitget은 BTC/USDT, ETH/USDT 및 XRP/USDT를 포함한 다양한 거래 쌍을 제공합니다. 또한 Exchange는 보안 및 유동성으로 유명하며 프리미엄 주문 유형, 레버리지 거래 및 24/7 고객 지원과 같은 다양한 기능을 제공합니다.

Gate.io는 사용자가 설치 패키지를 다운로드하여 장치에 설치하여 사용할 수있는 인기있는 cryptocurrency 교환입니다. 설치 패키지를 얻는 단계는 다음과 같습니다. Gate.io의 공식 웹 사이트를 방문하고 "다운로드"를 클릭하고 해당 운영 체제 (Windows, Mac 또는 Linux)를 선택하고 컴퓨터에 설치 패키지를 다운로드하십시오. 설치 중에 항 바이러스 소프트웨어 또는 방화벽을 일시적으로 비활성화하여 원활한 설치를 보장하는 것이 좋습니다. 완료 후 사용자는 GATE.IO 계정을 만들려면 사용을 시작해야합니다.

세계 최고의 디지털 자산 거래소 인 Ouyi Okx는 이제 안전하고 편리한 거래 경험을 제공하기 위해 공식 설치 패키지를 시작했습니다. OUYI의 OKX 설치 패키지는 브라우저를 통해 액세스 할 필요가 없습니다. 설치 프로세스는 간단하고 이해하기 쉽습니다. 사용자는 최신 버전의 설치 패키지를 다운로드하고 설치를 단계별로 완료하면됩니다.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

OKX라고도하는 Ouyi는 세계 최고의 암호 화폐 거래 플랫폼입니다. 이 기사는 OUYI의 공식 설치 패키지 용 다운로드 포털을 제공하여 사용자가 다른 장치에 OUYI 클라이언트를 설치할 수 있도록합니다. 이 설치 패키지는 Windows, Mac, Android 및 iOS 시스템을 지원합니다. 설치가 완료되면 사용자는 OUYI 계정에 등록하거나 로그인하고 암호 화폐 거래를 시작하며 플랫폼에서 제공하는 기타 서비스를 즐길 수 있습니다.
