본문 바로가기

데이터베이스9

[MySql] 효과적인 인덱스 설계 인덱스(index)는 즉 색인이다테이블의 동작속도(조회를) 높여주는 자료구조이다. 인덱스로 데이터의 위치를 색인 처럼 빠르게 찾아주는 역할이다.select를 빠르게 하는 대신 update, delete, insert를 희생한다. 물론 update, delete 라고 다 희생되는게 아니라 update, delete를 하기 위해 해당 데이터를 조회하는 인덱스가 있으면 빠르게 된다.만약 인덱스를 사용하는 테이블에서는 update, delete를 하게 되면 가능한 인덱스로 지정된 컬럼을기준으로 진행하는게 좋다테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍.. 2022. 11. 7.
PostgreSQL 배열 함수 array_agg, array_to_string, unnest, array_append 먼저 가상 테이블을 생성하겠습니다. with make_array as ( select unnest(array['고기', '고기', '고기', '채소', '채소']) as col1 , unnest(array['삼겹살', '항정살', '가브리살', '상추', '명이나물']) as col2 ) select col1 ,col2 from make_array; unnest -> 인수로 입력받은 array를 행집합으로 반환 이런 결과가 나온다. col1 col2 고기 삼겹살 고기 항정살 고기 가브리살 채소 상추 채소 명이나물 with make_array as ( select unnest(array['고기', '고기', '고기', '채소', '채소']) as col1 , unnest(array['삼겹살', '항정살',.. 2022. 11. 4.
Postgresql With Recursive, UNION ALL 사용한 계층형 쿼리 Postgresql은 WITH RECURSIVE 구문으로 재귀쿼리로 사용가능하며 계층형 쿼리로 만들때 많이 사용한다. with recursive recursive_name [(column1,...)] as ( -- initial query (처음 호출하는 쿼리) SELECT [(column1, ...)] UNION [ALL] -- recursive query (재귀 쿼리) 반복되는 부분 SELECT [(column1, ...)] FROM recursive_name [WHERE] ) -- parent query SELECT * FROM recursive_name 이건 내 개인 프로젝트에서 사용하는 답글 기능을 추가한 댓글 리스트를 보여주는 쿼리다. WITH RECURSIVE cte AS ( SELECT a.. 2022. 9. 22.
PostgreSQL merge문 PostgreSQL은 mysql랑 다르게 UPLICATE KEY UPDATE 가없기 때문에 with문으로 직접 구현해야 한다. with upsert as ( update tb_user set reg_userno = #{user_no} ,upd_date = to_char(now(),'YYYYMMDDHH24MISS') where id = #{id} and reg_userno = #{reg_userno} returning * ) INSERT into tb_user ( id ,reg_userno ,reg_date ) select #{id} ,#{reg_userno} ,to_char(now(),'YYYYMMDDHH24MISS') where not exists(select * from upsert); -- with.. 2022. 9. 19.