반응형

DB/PostgreSQL 14

[PostgreSQL] View Table(뷰 테이블)에 대해서 알아보자.

뷰테이블은 하나의 가상 테이블이라고 생각하면 된다. 실제 데이터가 저장되는것이 아니고 뷰를 통해 데이터를 관리할 수 있다. VIEW와 TABLE과의 차이점은 그냥 TABLE은 실질적인 데이터가 있지만, VIEW는 데이터가 없고 SQL만 저장한다. 쿼리의 결과를 마치 사진으로 찍어 보존한 후, 다음에 또 쿼리 없이 볼 수 있도록 하는 역할 따로 데이터를 생성하는 것이 아니라 참조만 하는 것이다. 뷰가 참조하는 테이블의 데이터가 변경되면 뷰의 데이터도 같이 업데이트 된다. CREATE VIEW myview AS SELECT name, temp_lo, temp_hi, prcp, date, location FROM weather, cities WHERE city = name; SELECT * FROM myvie..

DB/PostgreSQL 2022.11.11

[PostgreSQL] PostgreSQL의 유니크 인덱스에 대해서 알아보자. (Unique Index)

A unique index guarantees that the table won't have more than one row with the same value. It's advantageous to create unique indexes for two reasons: data integrity and performance. Lookups on a unique index are generally very fast. 유니크 인덱스는 테이블에서 한개 이상의 row가 동일한 값을 갖지 않는 것을 보장한다. data integrity와 performance 측면에서 장점이 있다. 찾는 속도가 가장 빠르다. Only B-tree indexes can be declared unique. 오직 B-tree 인덱스만 ..

DB/PostgreSQL 2022.06.30

[PostgreSQL] PostgreSQL의 멀티 칼럼 인덱스에 대해서 알아보자. (Multicolumn Indexes)

An index can be defined on more than one column of a table. 인덱스는 테이블의 1개 이상의 컬럼에서 정의될 수 있다. CREATE TABLE test2( major int, minor int, name varchar ); SELECT name FROM test2 WHERE major = constant AND minor = constant; CREATE INDEX test2_mm_idx ON test2 (major, minor); 위의 예시와 같이 한 테이블에서 2개의 컬럼에서 인덱스 정의가 가능하다. 특징으로는 선언되는 순서가 매우 중요하다. 인덱스의 두 번째 컬럼은 첫 번째 컬럼에 의존해서 정렬되어 있는데 우선 그림으로 확인해보자. dept_no, emp..

DB/PostgreSQL 2022.06.30

[PostgreSQL] PostgreSQL의 GiST, SP-GiST Index에 대해서 알아보자.

(1) GiST 복합적인 지리학적(geometric) 데이터를 조회하는데 매우 유용한 인덱스이다. Full Text Search 에서도 사용한다. 인덱싱 과정은 아래 그림과 같은 방식이다. 분포 양을 내부적인 로직으로 점점 나눈다. 그래프로 한 번 알아보자. CREATE TABLE points(p point); INSERT INTO points(p) VALUES (POINT '(1,1)'), (POINT '(3,2)'), (POINT '(6,3)'), (POINT '(5,5)'), (POINT '(7,8)'), (POINT '(8,6)'); CREATE INDEX ON points USING GIST(p); 앞서 배운 Geometric Type을 사용해서 일부 점을 INSERT 했다. 그리고 점에 대해서..

DB/PostgreSQL 2022.06.19

[PostgreSQL] PostgreSQL의 Geometric Type에 대해서 알아보자.

PSQL에서는 기존의 다른 RDBMS와는 다르게 2차원 공간의 객체를 나타내는 타입을 가지고 있다. 아래 표와 같은 종류가 있고 하나씩 알아보자. (1) Point ( x , y ) x , y x와 y는 부동 소수점 숫자이다. 점을 나타낸다. (2) Line A x + B y + C = 0으로 표시되며 A 와 B 는 모두 0이 아님. { A, B, C } [ ( x1 , y1 ) , ( x2 , y2 ) ] ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 (x1,y1) 및 (x2,y2) 는 선에서 서로 다른 두 점. (3) Lseg [ ( x1 , y1 ) , ( x2 , y2 ) ] ( ( x1 , y1 ) , ( x2..

DB/PostgreSQL 2022.06.19

[PostgreSQL] PostgreSQL의 B-tree, Hash Index에 대해서 알아보자.

RDBMS에서 핵심 기능 중 하나인 인덱스의 종류에 대해 알아보자. 인덱스를 특정 데이터를 빠르게 가져오는 기술이다. 일반적인 예로 백종원의 레시피 책을 본다고 하자. 근데 우리는 짜장면 레시피를 확인하고 싶다면 일일이 처음부터 짜장면이 나올 때 까지 찾을 수 있겠지만, 책의 색인을 통해서 'ㅈ'(지읒)을 찾고 지읒에 있는 리스트들을 쭉 내려가면서 짜장면이라는 단어를 찾고 해당 페이지로 넘어가는 방법도 있을 것이다. 바로 DB에서 후자의 기술을 인덱스라고 할 수 있다. 공식 문서에서 인덱스를 찾아보면 Indexes are a common way to enhance database performance. An index allows the database server to find and retrieve..

DB/PostgreSQL 2022.06.19

[PostgreSQL] PostgreSQL의 쿼리 플랜에 대해서 알아보자. (Query Plan)

데이터베이스 엔진은 쿼리를 수행할 때 어떤 방식을 사용하고 어떤 순서로 쿼리를 수행 할지에 대한 계획을 세운다. PSQL에서는 쿼리 실행 계획(Query Execution Plan) 또는 쿼리 플랜(Query Plan)이라고 한다. 사용하는 키워드 - EXPLAIN : SQL구문을 이용해 쿼리 플랜 확인 - ANALYZE : 실행 시간을 포함한 구체적인 실행 계획을 분석 우선 쿼리 플랜을 실습하기 위해 간단한 테이블을 만들어보자. CREATE TABLE post ( id serial PRIMARY KEY, title varchar(255), author varchar(255), created_at timestamp ); DO $$ DECLARE i INTEGER := 1; BEGIN WHILE i < 1..

DB/PostgreSQL 2022.06.19

[PostgreSQL] PostgreSQL의 Date/Time 타입에 대해서 알아보자.

Date/Time 타입에 대해서 알아보자. 실제로 테이블에 데이터를 쌓을 때 CreatedAt, UpdatedAt, DeletedAt 등과 같이 시간 관련 타입을 사용하는 것은 아주 흔히 볼 수 있다. 아래 표와 같이 타입을 나눌 수 있다. 아래 예시를 통해서 Date/Time을 익혀보자. NOW()의 기준은 2022년 06년 19일이다. 1. 시간값 획득 SELECT NOW(); Result SELECT PG_TYPEOF(NOW()); Result 2. Current 키워드 사용 SELECT CURRENT_TIMESTAMP; Result SELECT PG_TYPEOF(CURRENT_TIMESTAMP); Result SELECT CURRENT_TIME; Result SELECT CURRENT_DATE; ..

DB/PostgreSQL 2022.06.19

[PostgreSQL] PostgreSQL의 통화 타입에 대해서 알아보자. (Monetary Types)

stores a currency amount with a fixed fractional precision 8 바이트 92233720368547758.08 ~ 92233720368547758.07 자리수는 lc_monetary 설정에서 관리한다. 올바른 출력을 위해 lc_monetary를 잘 맞추는게 중요하다. locale에 따라 출력은 다름 기본 출력은 $1,000.00 실제로는 이렇게 쓸일이 있을까 싶다. 흔히 경험한 바로는 화폐 숫자를 float 컬럼으로 만들고 enum타입으로 화폐 타입을 결정하는 패턴을 봐왔다. REFERENCES PostgreSQL : Documentation: 13: PostgreSQL 13.7 Documentation postgrespro.com

DB/PostgreSQL 2022.06.17

[PostgreSQL] PostgreSQL의 Enum 타입에 대해서 알아보자.

우리가 흔히 쓰는 프로그래밍 언어에서 사용하는 enum 타입과 동등하다고 생각하면 된다. enum 타입의 예시는 한주의 요일 등과 같은 것이라 할 수 있다. 예시를 통해 자세히 살펴보자. CREATE TYPE 커맨드로 생성한다. CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy'); CREATE TABLE person ( name text, current_mood mood ); INSERT INTO person VALUES ('Moe', 'happy'); SELECT * FROM person WHERE current_mood = 'happy'; name | current_mood ---..

DB/PostgreSQL 2022.06.17
반응형