postgresql에서 json 타입의 데이터를 컬럼에 저장할 때 json 또는 jsonb 데이터 타입을 사용할 수 있다. 둘은 결과적으로 json 형태의 데이터를 저장한다는 점은 같지만 저장 방식에 차이가 있다. 그 결과 쓰기와 읽기에서 각각 성능 차이가 난다.
1. 데이터 쓰기 속도
json 타입은 실제 json 형태의 문자열 그대로를 저장하는 방식이다. 공백을 포함한 평문을 그대로 저장한다.
반면 jsonb 타입에서 b는 binary를 의미하는데 바이너리 형태로 변환하여 데이터를 저장한다.
데이터를 insert 할 때 json 타입의 경우 곧장 raw 데이터인 텍스트 그대로 저장하는 반면 jsonb는 바이너리로 변환 작업을 거쳐야 한다. 그래서 쓰기 속도는 json 타입이 jsonb 타입보다 빠르다.
2. 데이터 읽기 속도
읽기 속도는 jsonb 타입이 json 타입보다 빠르다.
json 타입은 raw 텍스트 데이터로 저장되기 때문에 읽을 땐 데이터를 파싱하는 과정이 추가로 필요하다. 반면 jsonb 타입은 이미 파싱된 이진 데이터기 때문에 곧장 읽을 수 있다.
3. 인덱싱 여부
jsonb 타입 데이터는 인덱싱이 가능하다. 반면 json 타입은 인덱싱 할 수 없다.
그렇기 때문에 데이터가 커질수록 jsonb가 읽기 성능이 좋다는 의미다. 결국 쌓아 놓은 데이터를 자주 읽는 구조라면 jsonb 타입을 주로 사용한다.