이전까지는 아무 생각없이 MySQL 스키마, 테이블을 만들 때 utf8 charset과 utf8_bin collation으로 지정하고 사용해왔었다. 그런데 팀플을 하고 프로그래밍 교육을 들으면서 팀원들과 사람들이 나와는 다른 문자셋을 사용하는 걸 발견했다.... 찾아보니 utf8mb4 라는 문자셋과 utf8mb4_unicode_ci, utf8_general_ci, utf8_bin 등 다양한 collation이 있다는 걸 알게되었고, 원하는 서비스를 만들기 위해서는 이런 문자셋도 고려해야한다는 걸 알게되었다. (ex. 이모지를 제공하는 편지서비스 등) 이전에는 운 좋게 문자셋 관련한 오류를 발견하지 못했지만, 내가 사용하던 문자셋을 그대로 사용하면 어떤 오류가 터질 지 무서워졌다. 그래서 이번 기회에 제대..
database/MySQL
이번에는 MySQL의 풀 테이블 스캔에 대해 정리해보려고 한다. MySQL 서버에서 쿼리의 실행절차 쿼리가 실행되는 과정은 다음과 같다. SQL 파싱 최적화 및 실행계획 수립 결정된 실행계획을 이용해 스토리지 엔진으로부터 데이터를 가져옴 1. SQL 파싱 제일 처음에는 사용자로부터 받은 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리한다(파스 트리를 만든다) 이 부분은 MySQL 서버의 SQL 파서 모듈로 처리한다. SQL문장이 문법적으로 잘못된 경우 이 단계에서 걸러진다. 2. 최적화 및 실행계획 수립 SQL 파스 트리를 이용하여 어떤 테이블로부터 읽을지, 어떤 인덱스를 이용해 테이블을 읽을지 선택한다. 이 부분은 MySQL 서버의 옵티마이저에서 처리하며, 이후 쿼리의 실행계..
이전에 썼던 잘못된 글.. https://fladi.tistory.com/312 [DB] Unique index와 pk 최근 데이터베이스 인덱스에 대해 공부를 하고 적용시키는 과정에서 아직 모르는 부분이 있는 걸 발견하였다. 관계형 디비에서 pk를 지정하면 해당 pk는 unique인덱스가 이미 존재한다는 것이었다 fladi.tistory.com 작년에 다음과 같은 포스팅을 했었다. 이 때는 인덱스가 뭔지도 몰랐고, Unique인덱스도 처음 들어보는 이야기였다. Primary키를 왜 써야하는지 쓰면 뭐가 좋은지도 몰랐고 그냥 쓰라고 해서 썼었던 시절이었다. 그래서 구글링을 조금 해보면서 둘의 차이점을 블로그에 올렸었다. 하지만 최근에 Real MySQL 책을 읽고 디비를 공부하면서 내가 알고있던 지식이 잘..
글의 내용은 Real MySQL 8.0 책을 참고하였습니다. DBMS들이 데이터 압축을 사용하는 이유 디스크에 저장된 데이터 파일의 크기는 쿼리 처리 성능과 직결되며, 백업 및 복구 시간과도 밀접하게 연관된다. 데이터 파일의 크기가 커질수록 쿼리 처리를 위해 많은 데이터 페이지를 InnoDB 스토리지 엔진 버퍼풀로 읽어들여야할 수 있고 새로운 페이지가 버퍼풀로 적재될 때 더티 페이지가 더 자주 디스크로 기록되어야 함 (Disk IO 증가) 이런 문제점 때문에 많은 DBMS는 데이터 압축 기능을 사용한다. MySQL 서버에서는 테이블압축과 페이지 압축 기능을 제공한다. MySQL 페이지 압축(많이 사용 x) MySQL 서버가 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장되고, 디스크에서 데이터 페..
이 친구가 눌러도 반응이 없다. 분명 2주 전까지만 해도 잘 사용했던 것 같은데... 원인분석 MySQL Workbench 8.0이 설치된 폴더로 가서 mysql -u root -p 를 실행해보았다 해당하는 파일이 없다고 함 다시 설치하면 해결될 수 있다하기에 mysql을 지우고 다시 설치해봤지만, 같은 오류가 발생함 VCRUNTIME140.dll 파일을 찾아 직접 system32 폴더에 추가해봤지만 VCRUNTIME140_1 파일이 없다고 했고, 얘도 추가해봤는데 아예 다른 오류가 발생함 이유 및 해결 visual studio c++를 삭제해서 그랬었다. vs studio를 다시 설치해주니 제대로 동작하는 것을 확인할 수 있었음 참고한 자료 https://answers.microsoft.com/ko-k..
NOT NULL 값이 항상 있어야함. null이면 안 된다. UNIQUE 해당 컬럼은 중복되는 값이 있어선 안 된다. 유일한 값으로 존재해야 함. PRIMARY KEY 테이블을 대표하는 컬럼. NOT NULL + UNIQUE 제약조건이 들어감. FOREIGN KEY 참조하는 테이블에 존재하는 값만 사용 가능 CHECK 주어진 조건에 해당하는 값만 입력 가능 DEFAULT 기본값 지정 NOT NULL CREATE TABLE member ( id BIGINT(20) NOT NULL, name VARCHAR(255) NOT NULL, birth DATE, primary key (id) ); INSERT 시 id와 name은 null값이 들어갈 수 없다 기본값은 nullable(null을 넣을 수 있음)이므로,..
MySQL Workbench 8.0.29 설치하기 저는 MySQL server가 이미 설치된 상태에서 workbench를 설치하는 것입니다. 다운로드 사이트: https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.29 2.3M (mysql-installer-web-community-8.0.29.0.msi) MD5: 4f73..
vscode, visual studio code에서 MySQL사용하기 ① extension 버튼을 누른다. ② mysql을 검색한다 ③ 원통 2개가 그려진 MySQL 클릭 ④ install 해준다. ① 원통형 아이콘이 생기는데, 그걸 눌러준다. ② + 버튼을 누른다. ③ Host, Port, Username, Password 를 작성해주고 ④ connect를 누른다. 미리 만들어두었던 데이터베이스가 나타난다. sql문서도 잘 작성되는 것을 볼 수 있다. 참고: 저는 bitnami를 이용하여 컴퓨터에 mysql을 설치 완료한 상황입니다 참고자료: https://devbirdfeet.tistory.com/176