Programming/Database 13

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리

SQL SELECT 쿼리 실행 순서 및 처리 과정 정리'SELECT Query'는 데이터베이스에 저장된 데이터를 조회하는 쿼리로, SQL에서 가장 많이 사용되는 기본적이면서도 핵심적인 기능입니다.SELECT 쿼리는 일반적으로 작성하는 순서와 실행되는 순서가 다르다는 특징이 있는데요.쿼리가 실행되는 순서를 이해하는 것은 쿼리를 효율적으로 작성하고 또 최적화하는 데 중요한 역할을 한다고 생각합니다. 해당 포스팅에서는 'SELECT 쿼리의 실행 순서 및 처리 과정'을 정리하였습니다. SELECT 쿼리 실행 순서 및 처리 과정SELECT [DISTINCT] 필드명FROM 테이블명WHERE 조건GROUP BY 컬럼명HAVING 조건ORDER BY 컬럼명 [ASC || DESC](SELECT 쿼리 기본 구조)  '..

MySQL CTE란? (+ WITH RECURSIVE CTE)

MySQL CTE(Common Table Expression)란? 최근 SQL 문에서 'WITH RECURSIVE CTE'라는 구문이 사용되는 것을 보고 공식 문서를 참고하여 관련된 기본적인 내용을 정리하게 되었습니다. CTE란? 'CTE(Common Table Expression)'는 하나의 쿼리문 범위 내에서만 존재하며 여러 번 참조될 수 있는 이름이 지정된 일회성 테이블(정확하게는 결과 데이터)입니다. CTE에는 '비재귀적(Non-Recursive) CTE'와 '재귀적(Recursive) CTE' 두 가지가 있으며, 아래 내용을 통해 각각에 대해 예시를 포함하여 자세하게 살펴보도록 하겠습니다. * CTE는 MySQL 8.0.1 버전에서 도입되었으며, ANSI-SQL99 표준에서부터 나온 것이기 때문..

데이터 웨어하우스, 데이터 레이크 개념 및 차이점 정리(Data Warehouse, Data Lake)

데이터 웨어하우스(Data Warehouse), 데이터 레이크(Data Lake) 개념 및 차이점 데이터 웨어하우스란? 데이터 웨어하우스(Data Warehouse)란 정보(data)와 창고(warehouse)의 의미가 합성되어 만들어진 어휘로, 조직 전체의 여러 소스들(ERP, CRM, 데이터베이스, IoT, 파트너 시스템 등)로부터 데이터를 저장하고 처리하여 비즈니스 인텔리전스(BI) 활동, 특히 분석을 활성화 및 지원하기 위해 설계된 데이터 관리 시스템의 한 유형입니다. 쉽게 사용자의 의사 결정에 도움을 주기 위하여 정보들이 분석 가능한 형태로 저장되어 있는 중앙 저장소이며, 때문에 '의사결정 지원 시스템'이라고도 하는데요. 데이터 웨어하우스는 기존의 정보를 활용해 더 나은 정보를 제공하고, 데이터..

Java Enum 타입 데이터베이스 저장 형식은 뭐가 좋을까? (enum, varchar, tinyint)

Java Enum Type 데이터 DB 저장 형식 (enum, varchar, tinyint) 해당 내용은 데이터베이스 설계 과정에서 Java Enum 타입의 데이터는 어떤 형식으로 저장되는 것이 좋은가에 대해 고민하며 정리한 내용입니다. 실제로는 'varchar'와 'tinyint' 사이에서 고민했으나, mysql의 경우에는 'enum' 타입도 존재하기 때문에 mysql enum 타입에 대해서도 함께 비교하였습니다. enum을 함께 비교하기는 하였지만 mysql의 enum 타입은 여러 이유로 인해 많이 쓰이지는 않는데요. 아래 내용에서는 mysql enum 타입의 특징과 쓰이지 않는 이유에 대해 간단하게 살펴보고 이어서 enum, varchar, tinyint 각각의 타입에 대해 실제 데이터를 넣고 조..

MariaDB 가상 필드를 통한 JSON 인덱싱 방법(Generated Columns)

Indexing a Generated Column to Provide a JSON Column Index. 저장되는 데이터들이 많아지고, 또 그 데이터들의 형태가 복잡 + 다양하게 활용되고 있는데요. 때문에 관계형 데이터베이스(Relational Database)에서도 json 타입을 지원하고, 또 사용자들에게도 많이 사용되는 추세입니다. 'mysql'의 경우 MySQL 8.0.13부터 json 데이터 타입 필드의 인덱싱을 지원하는 반면, 'mariadb'의 경우 아직까지 json 타입의 필드에 대한 인덱싱이 지원되지 않고 있는데요. 아래 내용을 통해 'mariadb에서 가상 필드를 통한 json 타입 필드의 Indexing 방법'을 살펴보겠습니다. (해당 방법은 MySQL에서도 적용될 수 있습니다.) ..

(MySQL) IN, NOT IN, EXISTS, NOT EXISTS 동작 방식 정리

해당 내용은 IN / NOT IN / EXISTS / NOT EXISTS 동작 방식을 정리한 내용으로 MySQL을 기준으로 실행하고 작성된 내용이지만 MSSQL, Oracle 등에서도 적용되는 내용입니다. (예시에 사용될 orders table, customers table입니다.) (예시에 사용될 orders table의 data입니다.) (예시에 사용될 customers table의 data입니다.) IN SELECT * FROM orders o WHERE o.customer_id IN (1, 2); -- or 연산자로 변환된 쿼리 SELECT * FROM orders o WHERE (o.customer_id = 1 OR o.customer_id = 2); in 구문의 경우 in 구문에 입력된 값들 ..

데이터 타입 CHAR, VARCHAR의 차이점, 무엇을 써야할까?

대표적인 문자열 데이터 타입에는 CHAR, VARCHAR가 있습니다. 이 두 가지의 차이점은 무엇인지, 각각의 특징은 무엇인지에 대해서 살펴보겠습니다. 먼저 데이터 타입(DataType)에 대해서 알아보면, 컴퓨터 시스템과 프로그래밍 언어의 측면에서 보는 데이터 타입(자료형)은 실수, 소수, 정수, 문자열, 날짜 및 시간 타입 등, 여러 종류의 데이터를 식별하는 타입을 말하는데요. 자료형에 대해 가능한 값, 수행할 수 있는 명령어, 데이터의 형태 및 의미, 크기, 해당 자료형의 값이 저장되는 방식을 이야기합니다. 데이터베이스의 측면에서 보는 데이터 타입 역시 비슷한데요. 테이블을 정의할 때는 컬럼 별로 저장할 수 있는 타입까지 명시해야 하는데, 컬럼에 들어갈 수 있는 데이터 유형은 일반적으로 숫자형, 문..

트리구조 DB 설계 방법 - 클로저 테이블(Closure Table)

계층 구조를 가지는 데이터는 개발에서 너무나 자주 접하게 되며, 또 잘 설계되어야 효율적으로 사용할 수 있는 구조인데요. 때문에 한번 잘 정리해놓으면 좋겠다 싶어서 공부한 내용입니다. 해당 포스팅은 트리 구조의 데이터베이스를 설계하는 방식 중 '클로저 테이블(Closure Table)' 방식에 대해서 살펴보고, 직접 구현해본 내용입니다. Closure Table 'SQL Anti Patterns' 도서에 수록된 클로저 테이블은 '계층 구조를 저장하는 단순하고 우아한 방법'으로 정의되어 있습니다. 아래에서 자세하게 살펴보겠지만 클로저 테이블은 조상-자손 관계에 대한 경로뿐만 아니라 트리의 모든 경로를 저장하는데요. obj_table과 clo_table을 통해 자세한 내용 살펴보겠습니다. (기본적인 클로저 ..

DB 데이터베이스 인덱스(Index) 기본 개념과 설명

1. 인덱스(Index)란? Index는 RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조를 말하며, 테이블 내에 1개의 컬럼 혹은 여러 개의 컬럼을 이용하여 생성합니다. 특정 테이블의 컬럼을 인덱싱(Indexing)하면 검색을 할 때 테이블의 레코드를 전부 다 확인하는 것이 아니라 인덱싱 되어있는 자료 구조를 통해서 검색되기 때문에 검색 속도가 빨라지는 것입니다. Index는 빠른 검색 속도뿐만 아니라 레코드 접근에 대한 효율적인 순서 매김 동작에 대한 기초를 제공합니다. 인덱스를 설명할 때는 책을 통해서도 많이 비유되는데, 인덱스는 책에서 '목차'라고 생각할 수 있습니다. 책에서 정보를 찾을 때도 원하는 카테고리를 목차에서 찾고, 목차에 있는 페이지 번호를..

데이터베이스 연동 원리 JDBC, DataSource, Connection Pool

JDBC, Connection Pool, DataSoucre 개념과 원리 살펴보기 각각의 WAS에서 돌아가는 여러 개의 프로젝트들이 하나의 DB에 있는 데이터를 사용할 때 'Dirty Read', 'Non Repeatable Read', 'Phantom Read' 같은 문제점이 발생할 수 있다는 것을 알게 되고, 문제를 해결하기 위한 여러 가지 방법을 찾아보면서 Spring Boot에서 DB와 연결되어 데이터를 주고받는 동작 원리에 대한 이해가 부족하다고 느껴서 정리하게 된 내용입니다. 먼저 JDBC JDBC는 Java Database Connectivity의 약자로 스프링 프레임워크를 사용하기 전에 일반 Java 언어에서 DB 연결을 위해 사용하는 것으로 자바와 데이터베이스를 연결하기 위한 Java 표..