[PostgreSQL] PostgreSQL에서 중복 데이터가 조회 성능과 인덱스에 미치는 영향
·
개발 (Development)/PostgreSQL
데이터베이스 설계와 관리에서 중복 데이터는 성능 및 저장 효율성에 중요한 영향을 미칩니다. PostgreSQL에서 중복 데이터가 조회 성능과 인덱스 효율성에 어떤 영향을 미치는지 알아보고, 이를 해결하거나 완화할 수 있는 방법을 살펴보겠습니다.1. 중복 데이터가 조회 성능에 미치는 영향PostgreSQL에서 특정 컬럼이나 레코드에 중복 데이터가 많을 경우, 이는 다음과 같은 방식으로 조회 성능에 영향을 미칠 수 있습니다:불필요한 I/O 증가: 중복된 데이터가 많으면, 특정 값을 조회할 때 일치하는 레코드가 많아져 테이블에서 다시 확인(Heap Fetch)해야 하는 블록의 수가 증가합니다. 이는 디스크 I/O 비용을 높이고, 전체 쿼리 응답 시간이 느려지는 결과를 초래합니다.쿼리 플래너의 비효율적 실행 계..
[Python] Python을 활용한 서로 다른 데이터베이스 쿼리 결과 비교 및 엑셀 매핑
·
개발 (Development)/Python
데이터 분석이나 시스템 통합 작업에서는 서로 다른 데이터베이스에 저장된 정보를 통합하고 비교해야 하는 경우가 많습니다. 이번 글에서는 서로 다른 PostgreSQL 데이터베이스 쿼리 결과를 Python으로 가져와 비교하고, 엑셀 파일의 정보를 매핑하여 유사도를 계산하는 전체 과정을 설명합니다.문제 정의두 개의 PostgreSQL 데이터베이스에서 각각 데이터를 쿼리합니다.쿼리 결과를 조인하여 하나의 데이터프레임으로 병합합니다.병합된 데이터프레임을 엑셀 파일과 비교하여 태그 정보를 매핑합니다.엑셀 파일에 있는 details 컬럼과 병합된 데이터의 description을 비교하여 유사도를 계산합니다.데이터 처리 단계1. PostgreSQL 데이터베이스 연결 및 쿼리 실행서로 다른 데이터베이스에서 쿼리 결과를 ..
[PostgreSQL] 배열 기반 데이터에서 특정 요소의 기울기 계산하기
·
개발 (Development)/PostgreSQL
이번 포스트에서는 PostgreSQL에서 배열을 활용한 데이터 처리와 특정 조건에 따른 기울기 계산 방법을 소개합니다. 특히 데이터가 배열 형태로 저장되어 있고, 각 배열의 인덱스에 해당하는 값들 간의 관계를 기반으로 중간값 및 기울기를 계산하는 시나리오를 다룹니다.문제 설명주어진 테이블은 다음과 같은 컬럼을 포함하고 있습니다:timestamp_col: 이벤트가 발생한 시간asset_identifier: 자산 식별자feature_names: 이름을 포함한 배열feature_values: 값들을 포함한 배열데이터 예시는 다음과 같습니다:timestamp_col asset_identifier feature_names feature_values2025-01-01 12:00:00ASSET_XYZ['a', 'b'..
[PostgreSQL] 쿼리 최적화 - ANALYZE
·
개발 (Development)/PostgreSQL
ANALYZE 명령어는 PostgreSQL에서 통계 정보를 수집하여 쿼리 최적화에 필요한 정보를 갱신하는 데 사용됩니다. PostgreSQL의 쿼리 플래너는 쿼리를 최적화할 때 테이블과 열에 대한 통계 정보를 사용하므로, 정확한 통계 정보는 효율적인 쿼리 실행 계획을 수립하는 데 매우 중요합니다.1. ANALYZE 명령어의 기능테이블에 있는 각 열의 분포, 데이터 양, NULL 비율, 고유 값 수 등의 통계를 수집합니다.수집된 통계는 pg_statistic 시스템 테이블에 저장되며, 쿼리 플래너가 이를 참조하여 최적의 실행 계획을 생성합니다.테이블에 많은 데이터 변경(삽입, 업데이트, 삭제)이 발생한 후 ANALYZE를 실행하면 최신 통계 정보로 쿼리 성능을 개선할 수 있습니다.2. 기본 사용법전체 데이..
[PostgreSQL] 특정 컬럼 값이 가장 큰 경우만 불러오기
·
개발 (Development)/PostgreSQL
컬럼의 값이 가장 큰 행만 가져오도록 하기 위해서는 MAX(컬럼 명)를 활용하거나 서브쿼리 또는 ORDER BY를 사용할 수 있습니다. 다음은 depth가 가장 큰 값만 반환하는 쿼리의 예시입니다.방법 1: 서브쿼리 사용SELECT *FROM test_columnWHERE ancestor = 'test_01' AND depth = (SELECT MAX(depth) FROM test_column WHERE ancestor = 'test_01');방법 2: ORDER BY와 LIMIT 사용SELECT *FROM test_columnWHERE ancestor = 'test_01'ORDER BY depth DESCLIMIT 1;방법 1은 MAX(depth)..