MySQL
-
B-Tree 와 B+Tree 의 차이점DataBase/MySQL 2022. 8. 2. 23:38
B-Tree 와 B+Tree 는 더 효율적이게 원하는 데이터를 탐색할 수 있는 자료구조의 일종 으로 주로 데이터베이스의 인덱스를 사용할 때 쓰이는 알고리즘입니다. 이번 포스팅에서는 B-Tree 와 그것의 변형된 알고리즘인 B+ Tree 에 대해 알아보겠습니다. Tree 는 DB에 한정짓지 않더라도 탐색 시간을 단축할 수 있다는 장점 때문에 자주 사용이됩니다. B-Tree 의 핵심은 데이터가 정렬 된 상태로 유지되어 있다는 것입니다. B-Tree 는 위 그림과 같이 생겼습니다. Binary-Tree 라고 오해를 하지만 Balanced-Tree 를 의미합니다. 자식이 2개 이상 가능합니다. B-tree 는 균형 트리로 루트로부터 리프까지의 거리가 일정한 트리 구조입니다. 이렇게 균형을 유지할 경우 어떤 데이..
-
체인지 버퍼DataBase/MySQL 2022. 8. 2. 20:18
RDBMS 에서 레코드가 INSERT 되거나 UPDATE될 때는 데이터 파일을 변경하는 작업 뿐 아니라 해당 테이블에 포함된 인덱스를 업데이트하는 작업도 필요합니다. 이때 인덱스를 업데이트 하는 작업은 랜덤하게 디스크를 읽는 작업을 선행해야 하므로 테이블에 인덱스가 많으면 이 작업은 많은 자원을 소모하게 됩니다. InnoDB 는 변경해야 할 인덱스 페이지가 버퍼 풀에 있으면 바로 업데이트를 하지만 그렇지 않고 디스크로 부터 읽어와서 업데이트를 해야 한다면 즉시 실행하지 않고 임시 공간에 저장해 두고 바로 사용자에게 결과를 반환하는 형태로 성능을 향상 시킵니다. 이때 사용하는 임시 메모리 공간을 체인지 버퍼 라고 합니다. 하지만 유니크 인덱스의 경우 중복 여부를 체크해야 하기 때문에 체인지 버퍼를 사용할 ..
-
트랜잭션 격리수준DataBase 2022. 7. 21. 21:21
트랜잭션 트랜잭션 이란 트랜잭션이란 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는것을 이야기합니다. 돈 거래로 트랜잭션의 예시를 들어보도록 하겠습니다. 거래가 일어날 때의 과정은 다음과 같습니다. 우선 구매자의 계좌에서 10,000원을 출금합니다. 다음 판매자에 계좌에 10,000을 입금합니다. 이를 쿼리로 나타내면 이와 같이 나타낼 수 있습니다. UPDATE 문 : 구매자 계좌에 10,000 원 빼기 UPDATE 문 : 판매자 계좌에 10,000 원 더하기 마음처럼 되면 좋은데 출금 성공후 서버 다운이라든지 하는 이유로 오류가 생길 수 있습니다. 구매자의 계좌에서는 돈이 빠졌는데 판매자의 계좌에는 돈이 들어가지 않는 이런 상황을 방지하기 위해 나온것이 바로 트랜잭션입니다. 즉, 트랜잭션은 하나의 작업..
-
MVCC카테고리 없음 2022. 7. 14. 00:19
MySQL 은 격리수준에 따라 레코드를 읽어오는 방식에 차이가 있습니다. 그 이유는 MVCC(Multi Version Concurrency Control)와 관계가 아주 깊습니다. 이번 포스팅에서는 MVCC 에 대해 알아보겠습니다. MVCC 를 지원하는 이유 MVCC 는 잠금을 사용하지 않는 일관된 읽기를 제공하기 위해 사용됩니다. MVCC 는 MySQL 에서만 제공하는 기능이 아닌 레코드 레벨의 트랜잭션을 지원하는 DBMS라면 제공하는 기능입니다. MySQL 은 MVCC를 언두 로그(Undo log) 를 이용해 이 기능을 구현합니다. 참고로 여기서 얘기하는 Multi Version 은 하나의 레코드에 대해 여러개의 버전이 동시에 관리된다는 의미입니다. 우선 설명을 위해 아래와 같은 테이블을 하나 만들고..
-
MySQL 변수 종류DataBase/MySQL 2022. 4. 27. 23:12
1. 사용자 지정변수 (@ 가 앞에 붙습니다.) 사용자 지정 변수(User-defined variables)는 선언하거나 초기화 하지 않고 접근할 수 있습니다. 만약 사용자 정의 변수가 초기화 되지 않았다면 string 타입의 NULL 값이 반환됩니다. SELECT @var_any_var_name SET 과 SELECT 문을 사용해서 변수를 초기화 할 수 있습니다.(MySQL 8.0 에서는 SET 을 사용해서 변수를 초기화 할 것을 권장하고 있습니다. SET 외에 변수 초기화는 향후 버전에서 삭제 될 수 있다고 합니다.) Previous releases of MySQL made it possible to assign a value to a user variable in statements other th..
-
MySQL 사용자 변수DataBase/MySQL 2022. 4. 25. 18:55
MySQL 사용자 변수 변수명 사용자 변수는 @var_name 으로 표현 됩니다. 변수 이름은 알파벳, 숫자, ., _ 및 $로 구성될 수 있습니다. 사용자 변수 이름은 대소문자를 구분하지 않습니다. 이름의 최대 길이는 64자입니다. 변수명 범위 사용자 변수는 세션에 따라 다릅니다. 특정 클라이언트는 다른 클라이언트가 정의한 사용자 변수를 보거나 사용할 수 없습니다.(하지만 performance schema 의 user_variables_by_thread 에 대한 권한이 있는 사용자는 모든 세션에서 어떤 사용자가 정의한 변수던지 다 볼 수 있습니다.) 변수 해제 클라이언트 세션에 대한 모든 변수는 해당 클라이언트가 종료될 때 자동으로 해제됩니다. 사용 예시 사용자 변수를 만들 수 있는 방법중 하나는 SE..
-
MySQL 대소문자 구별DataBase 2022. 3. 1. 21:01
MySQL 대소문자 구별 참고로 해당 내용은 MySQL 8점대 기준으로 설명하고 있습니다. MySQL 의 대소문자는 MySQL 서버가 떠있는 운영체제에 따라서 다릅니다. Windows 는 대소문자를 구별하지 않고(case-sensitive) Unix 의 변형 운영체제(예를 들어 Linux) 대소문자를 구별합니다. (case-insensitive) MacOS의 경우 Unix 에 기반한 운영체제 지만 파일 시스템 타입이 대소문자를 구별하지 않는 형태입니다. 하지만, 대소문자를 구별하는 UFS도 지원합니다.(case-sensitive) Partition, subpartition, 컬럼(컬럼 alias 를 포함한), 인덱스, stored routine, event, and resource group names ..