16P by xguru 18일전 | favorite | 댓글 3개
  • 쿼리 성능을 향상하기 위한 인덱스를 추천해주는 PostgreSQL 확장 by Supabse
  • index_advisor() 함수에 쿼리를 넘기면 스타트업/전체에 대한 이전/이후 비용과 인덱스 생성용 SQL DDL을 리턴해줌
    • 실행: select * from index_advisor('select book.id from book where title = $1');
    • 리턴: {"CREATE INDEX ON public.book USING btree (title)"}
  • 복잡한 쿼리에 대해서는 여러개의 인덱스 생성문을 리턴하기도 함
  • 제네릭 파라미터 지원 ($1, $2, ..)
  • Materialized View 지원
  • 뷰에 의해 가려진 테이블/컬럼 식별 가능

현재 버전에서는 컬럼 하나짜리 btree 인덱스만 추천해줍니다. 조회조건이 복잡해지거나 full text 검색을 하고 있다면 이용할 수 없습니다 https://supabase.com/docs/guides/…

조회조건이 복잡한 경우 다중컬럼 인덱스 대신 단일컬럼 인덱스 여러개가 사용된다고는 하는데 정확히 같은 동작을 하지는 않는 것으로 보입니다. 혹은 다중컬럼 인덱스와 단일컬럼 인덱스 여러개를 동시에 사용하는게 최선인 상황도 있다고 합니다

https://www.postgresql.org/docs/current/indexes-bitmap-scans.html

Hacker News 의견

  • 테이블에 실제로 저장된 데이터를 기반으로 더 효율적인 데이터 타입을 추천해주는 기능이 있으면 좋음
  • 느린 쿼리를 자동으로 감지하고 필요한 인덱스를 생성하는 데이터베이스가 있으면 좋겠음
    • 애플리케이션에서 로드 테스트를 실행하면 데이터베이스를 호출하고 쿼리를 수집한 다음, 데이터베이스가 자동으로 조정됨
  • HypoPG가 RDS에서 1년 이상 사용 가능했다는 것을 몰랐음
  • 3개 이상의 join에서 한 relation에 인덱스를 사용하길 원하지만, CTE에 limit를 걸지 않으면 Postgres가 각 join을 병렬로 실행하려 하고 수많은 행을 join하려고 함
    • 요즘 쿼리 플래너를 다루는 것이 pg와 헤어질 것 같음
  • CockroachDB에는 유사한 기능이 내장되어 있음
    • 느린 기존 쿼리를 가져와서 더 나은 쿼리 계획을 위해 가상 인덱스를 분석하고 제안함
    • 콘솔 UI에서 한 번의 클릭으로 추가할 수 있음
  • Presto나 Spark와 같은 분산 쿼리 엔진에서 인덱스 대신 파티션과 버킷을 사용하여 비슷한 작업을 수행함
    • 이는 계산, 시간, 비용을 줄일 수 있음
  • Vanilla Pl/PgSQL로 작성되어 편리함
    • index_advisor(text) 함수를 세션에 복사하고 하드 코딩 및 휴리스틱을 시작하고 싶은 유혹이 있음
    • 대부분의 의미 있는 확장은 컴파일, 설치, 생성, 삭제가 필요함
  • TiDB의 TiAdvisor와 유사하며, 가상 방법을 사용함
  • pghero를 사용 중이며, GUI로 이 기능을 제공함
  • 관련된 트레이드오프에 대한 고려나 통찰력은 제공하지 않는 것 같음
    • 기본 확장인 HypoPG는 쿼리 플래너에 영향을 미치는 데이터에 대한 통계를 수집하지 않는 것 같음
  • 상속된 부모 및 자식 테이블을 인식하는지 여부가 궁금함