SQL

Database, SQL 관련하여 공부하고 기록합니다

Oracle - Analyze

오픈을 맞이하며 배운 것

인덱스가 이미 잡혀 있음에도 성능이 안 나올 때, Analyze를 실행하는 것이 도움이 되었다. 아무리 인덱스가 생성되어 있어도, 데이터의 형태에 따라 만들어진 통계 정보가 없으면 FULL SCAN 이 발생할 수 있기 때문이다. Analyze란? Analyze는 인덱스, 테이블, 클러스터의 통계정보를 생성한다. Analyze가 생성한 ...

Concurrency 제어 - Locking

낙관적 락, 비관적 락 등

동시성 제어와 락 메커니즘 lock이란? Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법이다. Lock을 적용한다는 것의 의미란, 공유자원을 동시에 접근해서 문제가 될 수 있는 부분(critical section)을 순차적으로 처리하는 것을 의미한다. 그런데 lock은 처리량의 병목을 발생시킨다. Locking 기...

Oracle - 분석함수

SQL BOOSTER를 읽고

SQL 스터디 8주차! (종료) 1. OVER절 분석함수를 사용하기 위해 분석 대상을 지정할 때 사용 분석함수의 대상을 정하는 역할을 한다. 대부분의 분석함수는 OVER절과 같이 상요한다. OVER()와 같이 괄호 안에 아무런 옵션을 주지 않으면 조회된 결과 전체가 분석대상이다. 분석함수 종류 COUN...

Oracle - 트랙잭션과 락

SQL BOOSTER를 읽고

SQL 스터디 7주차! 트랜잭션 반드시 한 번에 처리되어야 하는 논리적인 작업 단위 (더는 쪼갤 수 없는 작업 단위) 트랜잭션은 COMMIT(반영)이나 ROLLBACK(취소)로 종료가 이루어진다. COMMIT으로 종료될 경우, 트랜잭션에서 변경된 데이터들은 모두 DB에 실제 반영된다. ROLLBACK으로 종료될 경우, 트랜잭...

Oracle - NL조인, 머지조인, 해시조인

SQL BOOSTER를 읽고

SQL 스터디 6주차! JOIN과 성능 내부적으로 조인이 처리되는 방식 NESTED LOOPS JOIN MERGE JOIN HASH JOIN 1. NESTED LOOPS JOIN (NL JOIN) 중첩된 반복문 형태로 데이터를 연결하는 방식 선행 집합(선행 테이블 - 조인을 위해 먼저 접근하는 쪽, 바깥쪽 루프)...

Oracle - 인덱스

SQL BOOSTER를 읽고

SQL 스터디 5주차! INDEX 기본 개념 인덱스: 테이블 내의 데이터를 찾을 수 있게 일부 데이터를 모아서 구성한 데이터 구조 목적: 테이블 내의 데이터를 빠르게 찾아내기 위함 생성방법 1 CREATE INDEX 인덱스명 on 테이블명(컬럼명) 인덱스의 종류 구성하는 컬럼의 수에 따른 분류 단일인덱스Sing...

Oracle - 성능개선

SQL BOOSTER를 읽고

SQL 스터디 4주차! EXPLAIN PLAN 예상 실행계획 예상 실행계획 만들기 EXPLAIN PLAN FOR SELECT * FROM T_ORD WHERE ORD_SEQ = 4; 예상 실행계획 확인하기 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY()); 결과 Plan hash value: 2027818...

Oracle - SUB QUERY

SQL BOOSTER를 읽고

SQL 스터디 3주차! 서브쿼리 장점 : 서브쿼리는 조인보다 이해하기 쉽다. 단점 : 서브쿼리 성능이 좋지 못할 수도 있다. sql 실행계획이 특정된 방법으로 제약될 가능성이 있기 때문이다. 모든 조인을 서브쿼리로 해결하려 해서는 절대 안된다. SELECT절의 상관 서브쿼리 서브쿼리가 아닌 조인으로도 해결할 수 있지만, 코드...

Oracle - JOIN

SQL BOOSTER를 읽고

SQL 스터디 2주차! JOIN 🖇 1. INNER JOIN 조인 조건을 만족하는 데이터만 결합해 결과로 내보닌다. 필터조건 : FROM절의 테이블에서 필요한 데이터를 걸러내는 역할 FROM절에 사용된 테이블이 하나면 WHERE절에는 필터조건만 존재 조인조건 : 두 개의 테이블을 연결하는 역할 ...

Oracle - GROUP BY

SQL BOOSTER를 읽고

SQL 스터디 1주차! 🖇 GROUP BY 데이터를 그룹화하는 문법. 같은 값을 가진 데이터끼리 모으는 것. 중복된 값이 제거되어 결과로 나올 수 있도록 한다 = DISTINCT의 역할과 같다. DISTINCT 와 다른 점: SUM, MIN 같은 집계함수를 쓸 수 있다. TO_CHAR, TO_D...

Oracle - index, explain plan

성능 개선을 위해 튜닝을 하며

최근 속도 개선 이슈 튜너와 상의 후 몇 가지 쿼리의 explain plan을 확인하고 인덱스를 추가할 일이 있었다. 비교적 많은 테이블들을 join해야하는 조회 서비스에서 table full search가 발생하고 있었기 때문이다. INDEX 오라클의 인덱스 종류는 4가지 이다. B-TREE INDEX (가장 일반적) BIT...

DB - 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

<데이터 중심 애플리케이션 설계를 읽고>

신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 신뢰성Reliability : 하드웨어나 소프트웨어 결함, 인적 오류같은 역경에 직면하더라도 시스템은 지속적으로 올바르게 동작(원하는 성능 수준에서 정확한 기능을 수행)해야 한다. 확장성Scalability : 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서 이를 처리할 수 ...

DB - Select for update

Select for update

Select for update 데이터 수정하려고 SELECT 하는 중이야~ 다른 사람들은 데이터에 손 대지 마! 하는 것 동시성 제어를 위하여 특정 ROW에 대해 베타적 LOCK을 거는 기능 가정 먼저 LOCK을 획득한 SESSION의 SELECT 된 ROW들이 UPDATE 쿼리후 COMMIT 되기 이전까지 다른 SESSION들은 해당...

DB - MyBatis

마이바티스에 대해 알아보자

MyBatis란? 개발자가 지정한 SQL, 저장 프로시져, 고급 매핑 등을 지원하는 persistence Framework(데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합) JDBC로 처리하는 상당 부분의 코드와 파라미터 설정, 결과 매핑을 대신 해줌 데이터 레코드에 Primitive Type, Map inte...

DB - NoSQL

대량데이터 동시처리

NoSQL Not Only SQL : 기존의 관계형 DBMS가 가지고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원한다. 기존의 RDBMS가 가진 특성: ACID Atomic Consistency Integrity Durablity 특징 기존의 관계형 데이터베...

DB - 토스뱅크 데이터 설계사상

데이터 모델링에 대한 토스의 생각 엿보기

토스 SLASH 중요한 것은 ‘고민을 하고 만들었는가’이다. 토스뱅크 데이터 설계사상 테이블의 통합과 분리 순환 참조 활용 테이블 종류의 체계적 관리 비대면 대량 거래 설계 성능 최적화 설계 1. 테이블의 통합과 분리 테이블을 분리한 경우 대출외부심사내역과 카드외부심사내역 대출: 대출기본 - 대출외부심사내...

DB - SQLD 정리

SQLD

SQLD 시험범위 정리 DML, DCL, DDL DML : 데이터 조작어 SELECT, INSERT, DELETE, UPDATE 비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터를 원하는지를 명세하는 언어다. 호스트 프로그램 속에 삽입되어 사용되는 DML명령어들은 데이터 부속어Data Sub Language라고도 한다. DD...

DB - ANSI-SQL & T-SQL

SQL의 종류

SQL 관계형 데이터베이스 관리 시스템의 표준 언어 ANSI-SQL 표준이 되는 SQL T-SQL Microsoft에서 만든 SQL ANSI-SQL의 확장형 차이점 ANSI-SQL 테이블 JOIN이 FROM절에 들어감. WHERE절에는 검색 옵션 정보만 기술 T-SQL보다 가독성이 좋다 ...

데이터 모델링 기초 - 엔티티, 속성, 관계

Entity, Attribute, Relationship

데이터 모델링 사용자의 요구사항을 분석해서 IT시스템을 구축하기 위하여 ‘데이터’ 요건을 형상화하는 작업 (테이블을 만들어놓고 데이터를 잘 모델링한 후, 그 데이터에 사용자가 쉽게 접근하게 하기 위해 프로그래밍을 하는 순서다) 프로그램에 데이터 모델링이 필요한 이유 소프트웨어의 본질은 동작과 데이터다 ...

DB - MySQL 명령어

SQL 기본 명령어 모음

SELECT * FROM table 어떤 행을 선택해서 조회할 때 WHERE condition 조건을 주어 행을 검색하고 싶을 때, 해당 조건에 맞는 결과 반환 AND / OR 조건문을 연결하는 역할 조건1 AND 조건2 OR 조건3 등등등 WHERE NOT condition 해당 조건에 반대되는 조건 주기 WHERE state IN ...

DB - 데이터베이스와 아키텍쳐 구성

데이터베이스 첫걸음 - 미크, 기무라 메이지

아키텍처 시스템을 만들기 위한 물리 레벨의 조합 어떤 기능을 가진 서버를 준비하고, 어떠한 저장소나 네트워크 기기와 조합해서 시스템 전체를 만들 것인가 하드웨어와 미들웨어의 구성을 의미 아키텍쳐 설계 : 하드웨어와 미들웨어 구성을 시스템이 완수해야 할 목적과 비교하면서 결정해 가는 것. 아키텍쳐 설계에는 서버, OS, 데이터베이스...

DB - 데이터베이스에 얽힌 돈 이야기

데이터베이스 첫걸음 - 미크, 기무라 메이지

데이터베이스의 초기 비용 시스템의 전체 비용 내역 초기비용 : 최초에 지급하는 돈 (하드웨어 구매비용, 엔지니어나 프로그래머의 급여 등) DBMS를 도입할 때 초기비용이란, 소프트웨어의 라이센스 비용(subscription은 사용허가 기한이 정해진 것) Processor License : ...

SQL - 관계형 데이터베이스

데이터베이스 첫걸음 - 미크, 기무라 메이지

데이터베이스에서 수행할 수 있는 데이터 조작 검색 신규 데이터 등록 기존 데이터 갱신(등록) 기존 데이터 제거 관계형 데이터베이스 (Relational DataBase) 관계 : 2차원 표를 표기할 때 사용하는 단어. 엑셀, 구글독스와 같은 스프레드시트 형태 관계형 데이터베이스 : 데이터를 2차원 표를 사용해 관리하는 ...