본문 바로가기

데이터베이스34

Postgresql's memory architecture [ 목적 ] MySQL과 Postgresql의 철학을 이해하고 Postgresql 메모리 아키텍처의 차이를 이해하는 것을 목적으로 한다. [ 철학 ] MySQL과 Postgresql은 둘 다 OLTP 서비스에서 사용할 수 있는 RDBMS이다. 하지만 개발하게 된 철학과 기능, 아키텍처 등 많은 차이가 있다. Mysql MySQL의 철학은 '가볍고' 빠른 처리 속도와 간편한 사용을 강조하는 철학을 가지고 있다. 그렇기 때문에 다른 RDBMS에 비해 지원하는 기능이 부족하다. 쿼리의 재사용성을 높이기 위한 CTE, PK SEQUENCE 등 여러 기능이 존재하지 않는다. 그렇기 때문에 복잡도가 높은 쿼리가 필요한 서비스에서는 적합하지 않다. 가벼운 서버를 지향하는 MySQL 답게 쓰레드 기반으로 동작한다. 그.. 2023. 5. 13.
데이터베이스 실행 계획, 옵티마이저와 쿼리 최적화 실습 ( feat. mantech ) 목적 데이터베이스를 어떻게 하면 좀 더 잘 설계를 할 수 있을까??? 라는 질문에서 계속 궁금증이 생겨서 글을 작성한다. 쿼리가 어떤 것이 효율적인지 실행 계획을 분석하다가 정리할겸 글을 작성한다. 글에 바탕이 되는 데이터베이스는 Postgresql이고, DBeaver를 사용했다. 선행 지식 - 관계 대수 관계 대수를 프로그래밍 언어처럼 구성한 것이 SQL이고, 다음과 같은 종류가 있다. Selection: 선택 연산은 일반적으로 입력 릴레이션의 튜플 수에 비례한다. 따라서 선택 조건의 복잡도에 따라 비용이 결정된다. Projection: 투영 연산은 일반적으로 입력 릴레이션의 크기에 비례한다. 따라서 입력 릴레이션의 크기가 작으면 비용이 낮아진다. Union: Union 연산은 입력 릴레이션의 크기에 .. 2023. 5. 4.
Delete vs Truncate 목적 오늘 업무를 하다가 삭제 쿼리 개선에 관한 내용이 나와서 정리하고자 글을 작성한다. 두 쿼리의 차이점을 이해하고 효율적인 쿼리를 작성하자 공통점 두 쿼리 모두 데이터를 삭제한다는 관점에서는 같다. 차이점 삭제를 하는 방식과 결과 - DELETE : DELETE FROM ${테이블 명} WHERE 조건 조건에 맞는 모든 행을 삭제한다. - TRUNCATE TABLE ${테이블 명} 테이블을 초기화(모든 행을 삭제) 시키고, 관련된 FK와 PK, 인덱스를 삭제한다. 위 과정만 본다면 단순 모든 것을 삭제하는 TRUNCATE 연산이 좀 더 효율적인 것으로 알 수 있지만, 모든 데이터가 날라간다는 단점이 있다. 하지만 많은 양의 데이터를 제거해야한다면 TRUNCATE 연산을 고려해 볼 수 있다. 남겨야 할.. 2023. 4. 26.
postgresql's sequence obejct 0. 작성 계기 회사에서 postgresql을 사용하여 프로젝트를 진행하고 있다. 데이터를 넣는 과정에서 pk값을 수정하여 넣는 작업이 필요했다. 데이터를 수정하여 넣고, 기존 기능을 활용하여 데이터를 넣어야 하는데 pk값 중복이 발생하면서 정상 작동하지 않는 버그가 발생했다. 이유를 찾아본 결과, postgresql은 sequences 오브젝트를 활용하여 pk를 만들고 sequences를 하나 올림으로서 pk의 순서를 관리한다. 하지만 나는 sequences 오브젝트를 사용하지 않고 임의로 max +1 방식으로 pk값을 넣어줌으로서 sequences 오브젝트와의 충돌이 일어난 것이 문제였다. 기존에 사용하던 mysql은 auto_incerement 방식을 사용하여 위와 같은 문제가 발생하지 않지만, o.. 2023. 3. 28.