Database 5

[Real MySQL 8.0] 아키텍처 - MySQL 엔진 아키텍처

MySQL 엔진과 스토리지 엔진 mysql 엔진: 머리 스토리지 엔진: 손, 발 mysql 엔진은 요청된 sql 문장을 분석하거나 최적화 하는 등의 처리를 수행합니다. 스토리지 엔진은 데이터를 저장하거나 읽어오는 작업을 수행합니다. myql 엔진은 하나지만, 스토리지 엔진은 여러 개를 동시에 사용할 수 있습니다, CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB; test_table 에 대해 INSERT, UPDATE 등의 DML 작업이 발생하면 InnoDB 스토리지 엔진이 처리합니다. 각 스토리지 엔진은 성능 향상을 위한 기능을 가지고 있습니다. - MyISAM 스토리지 엔진: 키 캐시 - InnoDB 스토리지 엔진: 버퍼 풀 핸들러 API mysql..

Database 2023.09.05

[Real MySQL 8.0] 사용자 및 권한

mysql은 사용자의 접속 지점 (호스트 명 or ip 주소)도 계정의 일부가 됩니다. %는 모든 IP 또는 모든 호스트명을 의미합니다. 아래 두 계정은 서로 다른 비밀번호를 가지고 있는 다른 계정입니다. 'svc_id'@'%' 'svc_id'@'127.0.0.1' 만약 127.0.0.1 로 접속을 한다면 mysql은 아래 계정을 선택합니다. 권한이나 계정 정보에 대해 mysql은 범위가 가장 작은 것을 항상 먼저 선택하기 때문입니다. 그래서 이 경우에 '%'에 대한 계정의 비밀번호를 입력하면 비밀번호가 일치하지 않습니다. 계정 종류 시스템 계정: SYSTEM_USER 권한을 가짐, db 서버 관리자 - 계정 관리 - 다른 세션 또는 그 세션에서 실행 중인 쿼리 강제 종료 - 스토어드 프로그램 생성 시 ..

Database 2023.09.01

[Real MySQL 8.0] mysql 설치와 설정

docker compose 를 제외한 모든 내용은 Real MySQL 8.0 Chpater 2 를 읽고 정리하였습니다. 공부용 docker compose version: '3' services: real-mysql: image: mysql:8.0 ports: - '3311:3306' restart: always container_name: real-mysql # stdin_open과 tty를 true로 해야 컨테이너 안에서 터미널 실행이 가능하다. stdin_open: true tty: true environment: TZ: Asia/Seoul MYSQL_USER: user MYSQL_PASSWORD: user MYSQL_DATABASE: real-mysql MYSQL_ROOT_PASSWORD: root..

Database 2023.08.28

[친절한 SQL 튜닝] NDV, 선택도 (Selectivity), 카디널리티 (Cardinality)

친절한 SQL 튜닝을 읽고 개념에 대해 정리합니다. NDV (Number of Distinct Value) 유일하게 구별되는 컬럼 값 종류의 개수 예1 ) 성별 컬럼은 남자, 여자 두종류의 값으로 이루어져 있으므로 NDV(성별) = 2 이다. 예2 ) A1 컬럼이 A, B, C, D, E 5종류의 값으로 이루어져 있다면 NDV(A1) = 5 이다. 선택도 (Selectivity) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 비율 선택도 = 1 / NDV (where = 조건) 선택도 = 반환되는 레코드 수 / 전체 레코드 수 (일반적으로) 카디널리티 (Cardinality) 전체 레코드 중에서 조건절에 의해 선택되는 레코드 개수 (실제 predicate에 의해서 추출되는 row 수를 의미) 카디널리..

Database 2023.08.16

MongoDB에서 bulkWrite updateOne upsert를 할 때 filter: _id 주의점

MongoDB에서 bulkWrite updateOne upsert에 대한 문법은 다음과 같습니다. 참고: 공식문서 const bulk = [ { updateOne: { filter: {}, update: { $set: {}, $push: {}, ... }, upsert: true } } ] db.collection.bulkWrite(bulk) 여기서 filter에 ObjectId, 즉 _id를 제외한 다른 필드를 넣는것은 문제될 게 없습니다. 하지만 _id로 필터링을 하면 문제가 생깁니다. _id를 갖는 document가 없으면, 새로운 ObjectId를 갖는 document를 insert 하는 것이 아니라, 지정한 _id를 갖는 document를 insert합니다. 다음은 세가지 예시 코드입니다. co..

Database 2023.03.28