![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNb5aZ%2FbtsIghEQ0of%2F0mpNZniWlC8ggmUfWb1ZT1%2Fimg.png)
이기종 마이그레이션을 실습해 보고 간단하게 어떠한 과정을 거치는 알아보려고 한다.환경은 MySQL 8버전 PostgreSQL 15 버전이다. MySQL 데이터베이스 접속mysql -u root -p MySQL 데이터베이스 생성먼저 MySQL에서 데이터베이스를 생성한다.CREATE DATABASE testdb; MySQL 테이블 생성생성한 데이터베이스에 접속한 후 테이블을 생성한다.USE testdb;CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(15) NOT NULL, position VARCHAR(15), hire_date DATE); 샘플 데이터 삽입INSERT INTO employees (nam..
READ UNCOMMITTED정의다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다.부정합'더티 리드(Dirty Reads)'가 발생할 수 있다. 아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되었을 경우 잘못된 정보를 기반으로 작업을 수행할 위험이 있다.상황 설명:도서관에서 책을 읽기 시작했다.다른 사람이 책에 메모를 하고 있지만, 아직 메모를 완성하지 않았다.READ UNCOMMITTED 상황에서는, 본인이 그 미완성 메모를 읽을 수 있다.즉, 작성자가 아직 메모를 확정하지 않았음에도 불구하고, 그 내용을 볼 수 있다.READ UNCOMMITTED는 다른 사람이 최종적으로 확정하지 않은 정보에 접근할 수 있다.이는 메모가 나중에 변경되거나 삭제될 수 있음을 의미하며, 이로 인해 잘못..
날짜로 필터링을 하거나 데이터 중복을 제거할 때 인덱스에서 데이터를 찾는지 또는 추가적인 작업을 하는지는 쿼리 속도에 영향을 준다. 이 간단한 작업으로도 큰 효과를 가져올 수 있었다. 당시 회사내 쿼리 개선 된 결과) 분류 쿼리 속도 행 수 기존 쿼리 약 26401ms 약1800만건 개선 된 쿼리 약 190ms 약6만8천건 가정 예를 들어 이런 쿼리가 있다고 가정해 보자.(날짜에 파티션은 제외하고 가정) SELECT student, count(DISTINCT class_uid) as total FROM school.class1 WHERE date_format(plan_dt, '%Y%m') = '202307' GROUP BY student; 1. class1에는 plan_dt에 인덱스가 생성되어 있다. 2..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbN6dn%2FbtssgHeNyf1%2Fo6HaCP3XqnUw0vhgMSkKX1%2Fimg.png)
집에 남는 Window 노트북을 어떻게 활용할까 생각을 하다가 DB로 사용하면 좋겠다고 생각했다. 그래서 이 노트북에 MySQL Workbench와 서버 설치부터 외부 IP로 접속하는 방법까지 순차적으로 정리해보려고 한다. DB 컴퓨터: Window 11(사양 구림..) 버전: MySQL 8 Version 접속 컴퓨터: MacOS MySQL Workbench와 Server 설치하기 먼저, Window 컴퓨터에 MySQL Workbench와 Server를 설치하는 것이 필요하다. 설치 링크 : MySQL 공식 사이트 MySQL Workbench와 Server를 다운로드하고 설치할 수 있다. Workbench는 MySQL Server8.0과 호환이 되기 때문에 8.1이 아닌 8.xx 버전을 다운로드하자 새로..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLN5rr%2Fbtssbz977hD%2FZAiQX1RxmqSC5HSWs2GqZK%2Fimg.png)
로컬 DB를 외부에서 사용하기 위해 포트포워딩이 꼭 필요했다. 그래서 까먹지 않게 방법을 정리해보려고 한다. 하려고 하는 공유기는 SK브로드밴드이지만 Iptime이든 타 공유기도 비슷하지 않을까 싶다. 컴퓨터: Window 11 공유기: SK브로드밴드(RUSH-337AC) 공유기 관리자 페이지에 접속하기 먼저, 관리자 페이지에 접속하기 위해서는 해당 공유기의 IP 주소를 알아야 한다. IP 주소 알아보기 (Windows) 1. 시작 메뉴를 클릭하고 cmd 혹은 명령 프롬프트를 입력하여 프로그램을 실행시킨다. 2. 명령 프롬프트에 ipconfig를 입력하고 엔터를 누른다. 이때 본인이 노트북과 공유기가 어떻게 연결했는지에 따라 다르게 보면 된다. 본인은 Wi-Fi로 연결했기 때문에 Wi-Fi 쪽만 확인하면..
기본적으로 CASE 문에서는 복수의 조건을 테스트할 때 OR를 사용하곤 한다. 그러나, 같은 컬럼의 값이 특정 집합에 속하는지를 검사하려면 IN 연산자를 사용하는 것이 더 간결하고 읽기 쉬웠다. 예를 들어, lm.subj_nm 값이 '국어' 또는 '국어선택학습'인지를 검사하려면 다음과 같이 OR를 사용할 수 있다: when lm.subj_nm = '국어' or lm.subj_nm = '국어선택학습' then '1' 그러나 이것은 IN을 사용하면 더 간결하게 표현할 수 있다: WHEN lm.subj_nm IN ('국어', '국어선택학습') THEN '1' 두 쿼리는 완전히 동일한 결과를 내지만, 후자는 명확성과 가독성 면에서 더 우수하다고 생각한다. 특히 조건이 많아질수록 IN 연산자를 사용하는 것이 코드..
MySQL의 --login-path 옵션은 MySQL 5.6.6. 버전부터 추가된 옵션으로, 서버에 로그인하기 위한 사용자 이름, 패스워드, 그리고 기타 연결 매개변수를 설정 파일에 저장하고, 이를 불러올 수 있게 해주는 매우 유용한 기능이다. MySQL --login-path의 중요성 MySQL에 접속할 때 일반적으로 사용자 이름과 패스워드를 직접 입력하는 방식을 사용한다. 그러나 이런 방식은 다음과 같은 문제점이 있다. 보안 문제 : 패스워드를 직접 입력하는 방식은 보안에 취약해진다. 특히, 스크립트나 명령 히스토리에서 패스워드가 노출될 수 있다. 편의성 문제 : 빈번하게 MySQL에 접속해야 할 경우 매번 패스워드를 입력하는 것은 매우 번거로울 수 있다. 그래서 문제점을 보완하기 위해 mysql_c..
데이터베이스에서 쿼리를 수행할 때, 조건 판단 방식이 쿼리의 성능에 큰 영향을 미칠 수 있다. 이 포스팅에서는 WHERE 절에 CASE WHEN 구문을 사용하는 방식과 UNION을 사용하는 방식을 비교하며, 어떤 방식이 더 효율적인 쿼리 성능을 제공하는지 알아보려고 한다. 이 문제는 https://okky.kr/questions/389347 이 사이트에서 확인했다. 우선, SQL 쿼리에서 CASE WHEN 구문은 각 행을 하나씩 검사하면서 조건을 판단한다. 이로 인해 데이터베이스는 모든 행을 전체 검색(Full Scan)해야 하며, 이는 쿼리의 성능을 저하시킨다. SELECT F.friend_one, F.friend_two, F.requested_id, F.status FROM users U, frien..
개념적 클러스터드 인덱스(Clustered Index): 라이브러리에서 책을 찾는 것을 생각해 보자.책들이 그들의 주요 키인 ISBN 번호 순서대로 정렬되어 있다고 가정한다. 이 경우, ISBN 번호가 클러스터드 인덱스와 같다. 특정 ISBN을 가진 책을 찾으려면, 책장을 탐색하여 정확한 위치를 찾는다. 이러한 방식으로 책은 ISBN 번호에 따라 물리적으로 정렬된다. 세컨더리 인덱스(Secondary Index): 이제 책의 제목으로 책을 찾으려고 한다고 상상해 보자. 이 경우, 책의 제목은 보조 인덱스와 같다. 책 제목에 따라 정렬된 카드 카탈로그(세컨더리 인덱스)를 통해 먼저 책의 ISBN을 찾는다. 그다음, 이 ISBN을 사용하여 책장에서 실제 책을 찾는다. 커버링 인덱스(Covering Index..
내용 정리 MySQL에서 'Bulk Insert'는 한 번에 여러 행을 데이터베이스 테이블에 삽입하는 방법이다. 이를 사용하면 대량의 데이터를 빠르고 효율적으로 처리할 수 있다. 일반적으로 이러한 작업은 CSV 파일 또는 다른 형태의 텍스트 파일에서 데이터를 불러오는 경우에 많이 사용된다. 이 작업을 수행하는 기본 명령어는 LOAD DATA INFILE이다. 다음은 기본적인 LOAD DATA INFILE 구문이다: LOAD DATA INFILE 'data.txt' INTO TABLE my_table; 이 구문은 'data.txt'라는 파일에서 데이터를 읽어와 'my_table'이라는 테이블에 삽입한다. 이 명령어에는 다양한 옵션들이 있다. 예를 들어, 필드를 구분하는 구분자, 행을 구분하는 구분자, 문자..