Programming/MySQL 15

MySQL BETWEEN과 부등호 성능 비교해 보기 (+ 날짜 타입과 숫자 타입 비교)

MySQL BETWEEN과 부등호 성능 비교해 보기 (+ datetime, int 성능 비교) SQL 쿼리에서는 WHERE 조건절 안에서 'BETWEEN' 또는 '부등호(, >=)'를 사용하여 조건의 범위를 지정할 수 있는데요.최근 조건절에서 범위 지정 시 'BETWEEN'을 사용하는 것과 '부등호'를 사용하는 것의 성능 차이가 있다는 내용을 보게 되어 실제 데이터 조회를 통해 확인해 보게 되었습니다.(성능 차이가 발생하는 것을 직접 확인해보고 싶었기 때문에 원인에 대한 내용보다는 테스트와 결과에 초점을 둔 포스팅이라는 점 참고 부탁드리겠습니다.) 각 테스트에서는 약 30만 건의 동일한 데이터를 사용하였으며, 아래의 몇 가지 경우를 가지고 결과를 비교해 보았습니다.mysql 버전은 8.3.0 버전을 사용..

Programming/MySQL 2024.06.02

MySQL 공식 샘플 데이터베이스 적용하는 방법 (테스트용 데이터베이스)

MySQL에서 제공되는 샘플 데이터베이스 적용 방법해당 포스팅은 MySQL에서 공식적으로 지원하는 샘플 데이터베이스(Example Databases)를 다운로드하여 적용하는 과정을 정리한 내용입니다.(예시에서 사용된 버전은 'mysql 8.3.0 version' 입니다.) MySQL 샘플 데이터베이스 다운 및 적용https://dev.mysql.com/doc/index-other.html?ref=dbwriter.io 위 주소로 접속하면 MySQL에서 제공하는 샘플 데이터베이스를 다운로드할 수 있으며, 아래 내용을 통해서 샘플 데이터베이스 중 'world database'와 'employee data'를 적용하는 방법을 살펴보겠습니다.  world database 적용 방법우선 'world database..

Programming/MySQL 2024.05.31

MySQL 중복 데이터 조회 및 삭제 방법(GROUP BY HAVING)

mysql 중복 데이터 조회(group by having) 및 삭제 방법 데이터를 관리하다 보면 중복된 데이터를 찾아야 하는 경우가 있는데요. 해당 포스팅은 MySQL에서 'GROUP BY HAVING'을 사용하여 중복 데이터를 조회하는 방법과 삭제하는 방법에 대해 정리한 내용입니다. CREATE TABLE `users` ( `idx` bigint NOT NULL AUTO_INCREMENT, `last_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `first_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `birth` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, PRIMAR..

Programming/MySQL 2023.10.21

MySQL Workbench, ERD 생성 방법(+ zero or one 설정 방법)

MySQL Workbench, ERD 생성 방법 ERD란, Entity Relationship Diagram의 약자로 Entity 개체의 관계를 표시하는 다이어그램을 말합니다. (ER 다이어그램이라고도 부릅니다.) ERD는 데이터베이스의 구조를 한눈에 알아보기 위해 사용되는데요. 'Draw.io', 'DBDiagram.io' 등 웹 또는 프로그램을 통해 사용할 수 있는 ERD 툴이 존재하지만, RDBMS로 MySQL을 사용하는 경우 Workbench 자체적으로 ER 다이어그램 툴이 내장되어 있습니다. 해당 포스팅에서는 'MySQL의 Workbench를 통해 ERD를 생성하는 방법'에 대해 정리하였습니다. (작업 환경은 MySQL Workbench 8.0.30 Version입니다.) Workbench를 통..

Programming/MySQL 2023.08.27

mysql nextval 사용하는 방법 (oracle sequence 기능)

MySQL nextval 사용 방법 (Oracle Sequence) MySQL의 경우 AUTO INCREMENT를 사용하여 레코드에 대한 값이 중복되지 않고 1씩 증가하도록 할 수 있는데요. 때문에 AUTO INCREMENT는 기본 키(PRIMARY KEY)에 주로 사용됩니다. 하지만 Oracle의 경우 AUTO INCREMENT 기능이 없으며, 해당 역할을 Sequence가 하게 되는데요. 오라클에서 시퀀스(Sequence)는 '유일한 값을 생성해 주는 오라클 객체'이며, '값을 순차적으로 증가시켜 주기 위해서 사용되는 기능'입니다. 해당 포스팅은 mysql에서 필요에 의해 oracle의 sequence 기능을 사용해야 하는 경우 oracle의 sequence 기능인 'nextval를 사용하는 방법'에..

Programming/MySQL 2023.05.13

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경(DATE_ADD, DATE_SUB, CONVERT_TZ)

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경 mysql에서 날짜 또는 시간을 더하고 빼는 함수인 'DATA_ADD', 'DATA_SUB'와 타임존을 변경할 때 사용되는 'CONVERT_TZ' 함수에 대한 사용법을 정리한 내용입니다. 0. time zone 확인 SELECT @@time_zone, @@system_time_zone; 먼저 위 쿼리를 통해 mysql에 설정된 time_zone 정보를 조회하였습니다. time_zone이 SYSTEM으로 설정되어 있다는 것은 별도의 타임존이 설정되어 있지 않다는 것이며, 시스템의 타임존을 사용하겠다는 것인데요. 해당 테스트 환경에 설정된 mysql의 time zone은 KST(Korea Standard Time)이라는 것을 알 수 있습니다. 1. DATA..

Programming/MySQL 2023.04.07

(mysql, mariadb) general_log를 통한 실행된 쿼리 확인 방법

MySQL, MariaDB general_log를 통해 실행된 쿼리 확인 방법 mysql이나 mariadb를 사용하다 보면 실행된 쿼리를 확인하고 추적해야 할 때가 있는데요. 그럴 때 'general_log'를 통해 클라이언트로부터 접속된 접속 내용 및 수행된 모든 쿼리를 확인할 수 있으며, 아래 내용을 통해 자세한 방법을 살펴보도록 하겠습니다. * general_log 외 log 종류에 대해서 간단하게 살펴보면 아래와 같습니다. General Query Log: 클라이언트의 접속 내용 및 수행된 모든 쿼리를 기록합니다. Error Log: MySQL 시작, 종료 과정, 비 정상적인 종료 시 발생하는 트랜잭션 메시지, 쿼리 실행 중 발생하는 에러 등을 기록합니다. Binary Log: 데이터 조작어(DM..

Programming/MySQL 2023.01.28

mysql 자동 백업 설정 방법 (ubuntu server)

데이터베이스를 착각해서 데이터를 한번 날리고 나서야(정말 다행히도 개발서버) 백업 설정을 잘해야겠구나를 느끼게 되었습니다. 이후 운영환경의 서버에서는 데이터베이스 생성 후 가장 먼저 백업부터 설정하게 되었는데요. 해당 포스팅은 ubuntu 서버에서 mysql, mariadb 자동 백업을 설정 방법에 대한 내용입니다. (백업 과정에서 mysqldump 기능이 사용되는데, 해당 기능에 대한 자세한 내용은 따로 정리한 포스팅이 있어서 맨 하단에 링크를 첨부해놓았습니다. 필요하신 경우 참고해주시면 좋을 것 같습니다.) 백업 방식은 크게 '백업을 수행할 스크립트 파일(.sh) 생성', '작업 스케줄러(crontab)를 통해 생성된 스크립트 파일을 스케줄링' 두 가지로 나뉘는데요. 이어지는 내용을 통해 구체적인 데..

Programming/MySQL 2022.12.01

MySQL EXPLAIN 실행 계획을 통한 쿼리 최적화

해당 포스팅은 MySQL의 EXPLAIN 명령어를 통해 쿼리의 실행 계획을 확인하고 이 계획을 바탕으로 쿼리 최적화를 진행해보며 정리한 내용입니다. 1. EXPLAIN을 통한 쿼리 최적화를 진행하게 된 이유 프로젝트가 어느 정도 마무리되고 솔루션화를 진행하는 과정에서 기존에 짜여진 테이블 구조 중 마음에 들지 않는 부분들을 리팩토링하기 위한 계획을 세우고 있었습니다. 결론적으로 리팩토링 계획에 대한 피드백은 '기능상 문제가 있는 거라면 수정하는 것이 당연하겠지만, 정상적으로 작동하고 있다면 테이블 구조를 변경했을 때 발생하는 사이드 이펙트도 충분히 고려되어야 한다.'였습니다. (구조가 바뀌면 해당 테이블을 사용하는 모든 쿼리에 영향을 주게 되고, 결국 해당 부분에 대한 테스트까지 다 다시 진행되어야 합니..

Programming/MySQL 2022.11.12

MySQL JSON 데이터 타입에 활용되는 함수 정리

MySQL 5.7부터 DBMS 차원에서 JSON 데이터 타입이 지원되기 시작했는데요. 아래 내용은 최근 데이터베이스 쿼리에 JSON 함수를 사용해보면서 정리한 내용입니다. - JSON 타입에 저장? TEXT 타입에 저장? DB에 JSON 형식의 데이터를 저장할 때는 고려되어야 할 부분이 있는데요. 바로 해당 데이터를 저장할 컬럼의 타입으로 'JSON Type'을 쓸 것이냐, 'TEXT Type'을 쓸 것이냐, 입니다. MySQL에서 JSON Type에 데이터를 넣는 경우 내부적으로 binary 형태로 저장되며, TEXT Type에 데이터를 넣는 경우에는 string 형태로 저장되는데요. TEXT 타입의 경우에는 Type Conversion 없이 string 형태의 데이터를 그대로 전송해주면 되지만, JS..

Programming/MySQL 2022.10.29