본문 바로가기
반응형

Database21

is_left vs left_at vs left_status 트위터를 보다가 재미난 포스팅을 하나 발견했다. you-might-as-well-timestamp-it 전체적인 글의 주장은 다음과 같다. 소프트웨어 개발에서는 상황에 의존하는게 좋은 설계이지, 어떤 상황에도 좋은 기준이라는건 있을 수 없다고 생각한다. 다만, boolean (is_deleted) 대신 timestamp (deleted_at) 를 저장하는 것은 상황에 관계 없이 확실하게 좋은 설계라고 생각한다. 일반적으로 어떤 flag 값이 필요하다고 하면 그 flag가 언제 변경되었냐도 거의 필수적으로 필요하게 된다. 이미 boolean으로 결정해서 사용할 경우 이 시간을 찾아 내기 위한 마이그레이션 비용이 생각보다 많이 필요하고, 그때 가서 변경하기엔 많이 늦었다. 만약 timestamp (delet.. 2021. 6. 3.
Mac에 PostgreSQL없이 PSQL만 설치하기 일반적인 GUI 클라이언트에서는 PostgreSQL의 psql을 지원하지 않습니다. 그러다보니 psql 명령어를 입력이 필요하면 별도 설치가 필요합니다. 물론 PC에 PostgreSQL 을 설치하셨으면 psql 이 설치되어있겠지만, Cloud, Docker 가 대중화된 시점에서 직접 PC에 PostgreSQL을 설치하는 경우는 거의 없는것 같습니다. 1. 설치 먼저 기존에 설치된 psql이 있는지 확인해봅니다. psql --version 해당 명령어 실행시 설치가 안된 것이 확인이 되면 Homebrew를 통해 libpq을 설치합니다. brew install libpq 해당 패키지 설치시 psql, pg_dump 및 기타 클라이언트 유틸리티 전체를 사용할 수 있습니다. 다만, PostgreSQL 패키지에 .. 2021. 5. 21.
PostgreSQL 데이터 Client에서 KST로 확인하기 (feat. DataGrip) PostgreSQL에서는 보편적으로 UTC로 시간 데이터를 저장후, 애플리케이션 / Gui Client에서의 타임존에 맞춰 노출시키는 방식을 선택하는데요. 해당 컬럼의 타입이 timestamp with time zone 로 되어있어야만 합니다. Client Timezone에 따라 자동 전환이 되다보니 서버 애플리케이션에서 접속 하게 되면 UTC가 KST로 잘 전환이되어 노출 되는데요. 반면에 DB Gui Client로 접근할 경우 Client Timezone을 기본값으로 세팅하면 KST 전환이 안되는데요. 그래서 JetBrains사의 데이터 전문 도구인 DataGrip 혹은 IntelliJ의 Database Client에서 Client Timezone을 설정하는 방법을 소개드립니다. as-is 먼저 현재.. 2021. 4. 24.
MySQL IN절을 통한 성능 개선 방법 잘 사용되진 않는 범위 조건 중에 IN 이 있습니다. 일반적으로 BETWEEN, LIKE, 에 비해서는 하나씩 모든 Key를 입력해야 되기 때문에 애플리케이션에서 작업양이 추가되어 선호되진 않는데요. 이 IN 절을 통해 여러 성능 개선들이 가능해서 생각보다 활용하기에 따라 많은 성능 개선을 이룰 수 있습니다. 이번 시간에는 IN 을 통한 2가지 개선 방법을 소개 드리겠습니다. 0. 소개 MySQL의 IN 절은 UNION으로 처리됩니다. 즉, eq 조건을 여러번 나눠서 실행하는 것과 같은 효과를 가지는데요. 이미 다들 아시겠지만 MySQL은 범위 조건에서는 인덱스 효과를 제대로 보지 못합니다. MySQL 인덱스 정리 및 팁 정확히는 인덱스 앞의 컬럼을 범위 조건으로 사용하는 경우 뒤의 인덱스 컬럼은 효과를.. 2021. 4. 22.
MySQL Update Subquery 성능 비교 (ver.5.6) 지난 포스팅으로 select ~ where in (서브쿼리)와 같은 서브쿼리가 MySQL 5.6 버전에서 대폭 최적화 되었음을 확인하였는데요. 이번에는 update (update ~ where in (서브쿼리)) 에서도 서브쿼리 최적화가 잘 작동하는지 확인해보겠습니다. 0. 테스트 환경 테스트 환경은 이전 select 테스트때와 같습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not null auto_increment, target_id int not NULL, primary key (id) )ENGINE=Inn.. 2020. 9. 1.
MySQL where in (서브쿼리) vs 조인 조회 성능 비교 (5.5 vs 5.6) MySQL 5.5에서 5.6으로 업데이트가 되면서 서브쿼리(Subquery) 성능 개선이 많이 이루어졌습니다. 이번 시간에는 MySQL 2개의 버전 (5.5, 5.6) 에서 서브쿼리를 통한 조회 (Select)와 Join에서의 조회간의 성능 차이를 비교해보겠습니다. MySQL의 정석과도 같은 Real MySQL 책이 MySQL 5.5 버전을 기준으로 하다보니 5.6 변경분에 대해서 별도로 포스팅하게 되었습니다. 0. 테스트 환경 테스트용 테이블은 2개를 만들었습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not .. 2020. 8. 27.

728x90