DB

3. SQL (MySQL 기준)

옴악핫세 2023. 6. 18. 23:05

SQL이란

Structured Query Language

현업에서 쓰이는 relational DBMS의 표준 언어

종합적인 DB 언어 : DDL + DML + VDL

 

SQL 주요 용어

 

SQL과 RDBMS

SQL은 RDBMS의 표준 언어이지만 실제 구현에 강제가 없기 때문에 RDBMS마다 제공하는 SQL의 스펙이 조금씩 다르다

 

 

Data Type

SQL을 구현하는  RDBMS마다 Data type은 조금씩 다름

RDBMS 마다 VARCHAR 구현 방식이 달라 조회 시, 성능이 다르게 나옴

EX) PostgreSQL은 CHAR보다 VARCHAR를 쓰는 것을 공식문서에서 권장, MySQL은 VARCHAR는 스토리지 상 이점이 있지만 시간적인 성능은 CHAR가 더 우수

PostgreSQL과 MySQL은 둘 다 인기 있는 관계형 데이터베이스 관리 시스템(RDBMS)입니다. VARCHAR와 CHAR은 둘 다 문자열 데이터를 저장하는 데 사용되는 데이터 타입이지만, 조회 성능이 다른 이유는 두 데이터베이스 시스템의 내부적인 구현과 관련이 있습니다.

  1. 데이터 저장 방식:
    • PostgreSQL: VARCHAR 및 CHAR 데이터는 가변 길이로 저장됩니다. VARCHAR는 실제 데이터 길이에 따라 저장 공간을 동적으로 할당합니다. CHAR 열도 가변 길이로 저장되지만, 고정된 길이를 사용하며 저장할 때 공간을 채우기 위해 공백으로 채워집니다.
    • MySQL: VARCHAR는 가변 길이로 저장되지만, CHAR 열은 고정 길이로 저장됩니다. CHAR 열은 정의된 길이만큼의 고정 공간을 사용하며, 문자열이 해당 길이보다 짧을 경우 공백으로 채워집니다.
  2. 인덱스 구조:
    • PostgreSQL: PostgreSQL은 B-트리 인덱스를 사용하여 데이터를 저장하고 조회할 때 사용합니다. VARCHAR 및 CHAR 열은 일반적으로 동일한 방식으로 인덱싱됩니다.
    • MySQL: MySQL은 B-트리 인덱스뿐만 아니라 해시 인덱스도 사용할 수 있습니다. VARCHAR 및 CHAR 열의 경우, CHAR 열은 고정 길이이므로 인덱싱에 있어서 데이터 접근이 더 효율적일 수 있습니다.

이러한 차이로 인해 PostgreSQL과 MySQL에서 VARCHAR와 CHAR의 조회 성능이 다를 수 있습니다. 가변 길이로 저장되는 VARCHAR는 데이터 크기에 따라 저장 공간을 동적으로 조정할 수 있으므로, 데이터베이스가 실제 데이터 크기에 맞게 최적화되어 더 효율적인 조회를 할 수 있습니다. 그러나 CHAR는 항상 고정된 길이로 저장되므로, 데이터 크기가 작은 경우에도 고정된 공간을 사용하므로 저장 공간의 낭비가 발생할 수 있습니다.

또한, MySQL은 CHAR 열에 대한 해시 인덱스를 사용할 수 있기 때문에 조회 성능이 향상될 수 있습니다. 해시 인덱스는 정확한 일치 검색에 특화되어 있으며, VARCHAR 열의 경우 B-트리 인덱스를 사용합니다.

하지만 성능 차이는 데이터베이스 시스템의 버전, 설정, 테이블 및 인덱스 구조, 데이터 분포 등에 따라 다를 수 있으므로, 특정 상황에 따라 성능 테스트를 진행해야 합니다.

 

 

SQL CRUD

SELECT 조회

테이블에서 id 를 기준으로  WHERE에 설정된 selection condition 튜플을 찾고 SELECT에 설정된 attribute 값들만 조회

SELECT name, position FROM employee WHERE id = 9;

2개의 테이블에서의 조회

 

DB 구조를 정의할 때 중요한 점

만들려는 서비스의 스펙

데이터 일관성

편의성

확장성

등...

종합고려하여 DB 스키마를 적절하게 정의하는 것이 중요