DataBase/MariaDB & MySQL
-
[MySQL] B-tree, B+tree란? (인덱스와 연관지어서)DataBase/MariaDB & MySQL 2020. 2. 10. 20:37
B-tree는 인덱스를 이루고 있는 자료구조의 일종이다. B-tree에서 'B'는 정확히 어떤 의미라고 밝혀진 바는 없다. 아마 'Balanced'를 의미하는 'B'가 아닐까라는 추측만 있다. MySQL의 DB engine인 InnoDB는 B+tree로 이뤄져있는데, B-tree의 확장된 개념이다. 먼저 B-tree를 살펴보자. 트리 구조의 우위성 트리 구조는 꼭 데이터베이스에 한정하지 않더라도 시스템 세계에서는 데이터를 유지하기 위해 자주 사용하는 구조이다. '탐색' 시, 단시간 내에 실행할 수 있기 때문이다. B-tree의 핵심은 데이터가 정렬된 상태로 유지되어 있다는 것이다. 그림에 표시된 사각형으로 표시된 한 개 한 개의 데이터를 '노드(Node)'라고 한다. 가장 상단의 노드를 '루트 노드(Ro..
-
[MySQL] 인덱스(Index) 정리DataBase/MariaDB & MySQL 2020. 2. 9. 11:50
인덱스(Index) 정리 인덱스를 알아보기 전에 풀 스캔(Full Scan)과 레인지 스캔(Range Scan)을 이해해야 한다. 풀 스캔(Full Scan) & 레인지 스캔(Range Scan) 풀 스캔 : 테이블에 포함된 레코드를 처음부터 끝까지 읽어들인다. 레인지 스캔: 테이블의 일부 레코드에만 엑세스한다. 앞으로 예시로 들 테이블 구조 CREATE문 CREATE TABLE `user` ( `idx` bigint(20) NOT NULL AUTO_INCREMENT, `created_date` datetime DEFAULT NULL, `email` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) DEFAULT NULL, `password` varchar(..
-
[MySQL] Mysql에서 프로시저(procedure) 안에 사용된 문자열 검색하기DataBase/MariaDB & MySQL 2019. 1. 15. 22:27
Mysql에서 프로시저(procedure) 안에 사용된 문자열 검색하는 방법.md 사용하지 않는 것으로 보이는 프로시저(procedure)를 삭제하려는데, 그 프로시저가 다른 프로시저를 콜하고 있었다… 이걸 어떡하지. 이 개념이라면 사용하지 않는 것으로 보였던 프로시저도 다른 곳에서 콜하면 어떡하지라는 생각이 들었다. 그래서 찾은 방법은 아래와 같다. SELECT ROUTINE_SCHEMA , ROUTINE_NAME , ROUTINE_DEFINITION , ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%찾고자하는 문자열%' AND ROUTINE_TYPE='PROCEDURE'; ROUTINE_SCHEMA : 스키마..
-
[문자열 연결 function] MySQL의 group_concat과 oracle의 LISTAGG 사용 방법DataBase/MariaDB & MySQL 2018. 10. 22. 17:49
컬럼의 데이터들을 연결해서 보여주고 싶을 때가 있다. 예를 들면, 우리 회사의 사업 분야를 row 한 개에 보고 싶다! comp_name business_area zorba food zorba hotel zorba car zorba 회사의 사업 분야를 한 줄에 보게 되면 결과는 이렇게 만들 수 있다. comp_name total_business_area zorba food, hotel, car 이런 걸 가능하게 해주는 function이 mysql의 group_concat과 oracle의 listagg이다. 위의 예시를 이용해 사용법을 설명해보겠다. 1) MYSQL 123select group_concat(business_area SEPARATOR ',') from demo_table where comp_..
-
[MariaDB/MySQL]데이터 insert하면서 중복되면 update하는 기능DataBase/MariaDB & MySQL 2018. 5. 5. 14:34
다른 개발자분의 소스를 보다가 DB에 insert를 시행하는데 만약 데이터가 있다면 기존의 데이터를 덮어쓰기가 가능한 방법을 찾았다. MariaDB에만 있는 기능인지 오라클이나 다른 DB에도 있는 기능인지는 모르겠다. 일단, MariaDB/MySQL에 존재하는 기능이다. 그 기능은 INSERT ON DUPLICATE KEY UPDATE 기능이다. Primary key/Unique key가 기존에 존재하는 데이터를 찾을 경우, 그 데이터에 UPDATE를 하는 것이다. *쓰는 방법 예시 12345678910111213 INSERT INTO book_table SET book_seq = 1000 -- primary/unique key , book_title = 'greek zorba' , book_price ..
-
[iBatis+Spring+mariaDB] AUTO_INCREMENT의 초기화와 transaction에 관하여DataBase/MariaDB & MySQL 2018. 5. 3. 09:42
회사에서 iBatis를 사용하는 부분이 아직 남아있다.(대부분 MyBatis로 전환했지만.) iBatis부분에서 기능을 활용해 sequence를 만들어내고 있었다. 이 부분은 auto_increment로서 숫자가 자동으로 올라가고 있었다. 난 지금 JUnit test를 하는 중이기 때문에 클래스 부분에서 @Transactional을 적용하고 있었다. 몰랐던 사실이지만, auto_increment는 transaction이 적용되지 않는다는 것이었다. 그 뜻은 auto_increment는 rollback이 적용되지 않는다는 것. JUnit test를 할 때 이런 경우가 있다면, 테스트를 한 번 해보고 @Ignore처리를 하면 좋을 것 같다. auto_increment를 돌릴 수 있는 방법이 있다면, 직접 s..