본문 바로가기

MySQL16

[DB] 옵티마이저 (1) Mysql 서버로 요청한 쿼리는 최적으로 실행 되기 위해 최적의 실행 계획을 수립하는 작업이 필요.대부분의 DBMS 에서는 옵티마이저가 이런 기능을 담당한다.Explain 명령으로 쿼리의 실행 계획 확인 가능. Mysql 에서는 비용 기반 최적화 (Cost-based optimizer, CBO) 를 사용한다. 기본 데이터 처리풀 테이블 스캔 조건- 테이블 레코드 건수가 작아, 인덱스를 택하기 보다 풀 테이블 스캔 하는 편이 더 빠른 경우- where 절이나 on 절에 인덱스를 이용할 수 있는 적절한 조건이 없을 경우- 인덱스 레인지 스캔을 사용할 수 있는 쿼리더라도, 옵티마이저가 판단한 조건 일치 레코드 건수가 많은 경우 위와 같은 조건에서 Mysql 옵티마이저는 풀 테이블 스캔을 시도한다.풀 테이블 스.. 2024. 8. 11.
[DB] 인덱스 간략 정리 [1] 인덱스랜덤 & 순차 IO디스크 헤더를 1번, 여러번 옮기느냐? 즉, 디스크의 성능은 디스크 헤더 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 따라 결정Mysql 는 그룹 커밋, 바이너리 로그 버퍼, InnoDB 로그 버퍼 등의 기능으로 개선결국 랜덤 IO 를 줄이는 것이 쿼리를 개선하는 것을 의미정의ArrayList 와 SortedList 의 차이를 아는가?순차적으로 저장 or 정렬하여 저장빠르게 적재 or 느리지만 정렬하여 적재인덱스를 적용한다는 것은 쓰기 성능을 어느 정도 포기하고, 읽기 성능을 택하겠다.B-Tree 에서 인덱스 키 추가 및 삭제 시보통의 경우, 레코드 추가 비용 1 가정 시 인덱스 추가 비용을 1.5 로 예측하는 편.인덱스 키 삭제와 변경의 경우, InnoDB 엔진에 .. 2024. 6. 29.
DB 수정 & jpa 세팅 프로젝트의 전반적인 리팩터링을 다시 시작하며, 기존 mybatis를 이용했던 것을 그대로 옮겨왔다. 하지만 SQL Mapper를 이용한 설계 특성상 객체 지향적인 코드의 작성이 어려웠고, 또 기존 DB 설계의 문제도 있다는 것을 알게 되었다. DB의 전반적인 수정과 더불어, JPA를 이용해 다시 리팩터링을 해보기로 결정을 내렸다. 그 수정과정과 JPA 세팅 방법을 나열해보겠다. https://github.com/GroovyArea/My-ChickenBreast-Shop GitHub - GroovyArea/My-ChickenBreast-Shop: shop api with spring boot shop api with spring boot . Contribute to GroovyArea/My-ChickenB.. 2022. 8. 8.
쿼리 작성 및 최적화 요새 스프링 프로젝트, DB, 자소서 수정, 토비 스프링, 코테 준비 등등을 하고 있다. 하루가 너무 짧기도 하고 잠을 적게 자도 괜찮은 체질이 되고 싶은 요즘이다. DB공부는 Real Mysql을 읽고 있다. 읽기 너무 어려운 책인데.. DB 질문도 신입 개발자 면접에서 디테일한 질문까지 필수라고 하기 때문에 열심히 정리하면서 읽고 있다. 쿼리 작성 및 최적화 부분을 공부중인데 이 부분에서 헷갈리는 개념을 정리해볼 생각이다. Join 기법 Nested Loop Join 중첩된 반복문과 유사한 방식으로 조인을 수행 반복문 외부의 테이블을 선행 테이블 & 외부 테이블이라 칭함 반복문 내부의 테이블은 후행 테이블 & 내부 테이블이라고 칭한다. 조건을 만족하는 선행 테이블 행을 추출 후 후행 테이블을 읽으며 .. 2022. 5. 17.
Flyway & DB Migration 을 적용시켜 보자 스프링 프로젝트를 진행하면서 나는 DB 테이블을 한 번에 다 생성하고 시작하는 것이 아닌 필요한 것을 만들어가면서 진행하고 있었다. 그러고 Front를 만들지 않기 때문에 DB data를 직접 mysql을 열어 넣어주고 수정하는 작업을 반복하게 되었다. 참 비효율적이라 생각했다. 그러던 도중 Flyway라는 Tool을 알게 되었다. 새로운 기술을 마주하면 항상 낯선 기분이지만 DDL을 자바에서 직접 관리를 하게 해주는 툴이라는 것을 알게 되었고, 나처럼 스키마의 잦은 변경이 일어날 경우에 사용해보면 좋겠다는 생각이 들었다. 그래서 한번 정리해보고 사용해 볼 생각이다. 혹시나 해서 Schema 가 뭐야? 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것! 1. 개념 스키마 - 전체적인 뷰 2.. 2022. 5. 3.
2022.05.01 「View 만들기, Insert, Select 작업」 ▶ 주간 정리 1. 항상 구상했던 계획보다 늦어진다는 점 (주관적인 평가로 성과가 기대보다 떨어진다)? > 욕심이 많은 건가 생각이 든다. > 다른 생각을 하지 말고 집중할 수 있을 때 더 해보는 것으로! 2. mysql을 공부하며 어려웠던 점 > 책만 보는 것이 아닌 예제를 검색해보거나 직접 쿼리를 작성하면서 함 > 읽는 거보다 확실히 경험하는 게 머리에 잘 남는다. 3. 쉬고 싶은 욕구 > 솔직히 7일 내내 하루종일 실내에 박혀 모니터만 바라보고 있는 것이란 쉽지 않다.. (핑계다) > 적절한 때에 좀 쉬는 것으로 (잠 더 자기, 2시간 정도 친구와 밥 약속이라던지 등) 4. 프론트 관련 > 난 정말 front와 안 맞는다고 생각한다. 태그들을 보기만 해도 울렁거린다. > 그래도 해야 하니 이번 프로.. 2022. 5. 1.
2022.04.29 「부트스트랩 관련」 ▶파트 1 (10시 ~ 2시) 1. mysql Ch.10 실행 계획 (2. 부트스트랩 관련 문의) => 되면 3. 프로젝트 html 정리 ▶파트 2 (3시 ~ 6시) 1. 부트스트랩 폴더 추가(느려지니 나중에 하자) 2. 자소서 수정 3. Controller 정의 ▶프로젝트 관련 1. 페이징 처리 시 DB 요청 => mysql 이므로 oracle의 rownum을 사용하지 못 한다. 하지만 비슷하게 따라할 수는 있다. 그래도 mysql을 배웠기 때문에 차별화된 방식을 사용할 것. => 방식은 여러 가지이지만 limit 함수를 사용한다. (검색 속도가 빠름) 2022. 4. 29.
04.27 개인 프로젝트 시작 [닭가슴살 구매 사이트] [DB 구상] Spring boot를 이용하여 개인 프로젝트를 진행하기로 했다. 기존 진행했던 프로젝트 : https://sweeeetgoguma.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EB%84%90-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%84%88-%EB%A7%A4%EC%B9%AD-%EC%82%AC%EC%9D%B4%ED%8A%B8 [회고] 파이널 프로젝트 (트레이너 중계 플랫폼) ▶ 파이널 프로젝트 끝! (2022.3.23 ~ 2022.4.13) 드디어 파이널 프로젝트가 끝이 났다! 회의 시작일이 벌써 엊그제 같은데.. 눈 내리는 첫 회의일에 시작을 해서 끝나고 보니 벚꽃이 떨어질 때이다. 중 sweeeet.. 2022. 4. 27.
2022.04.27의 기록 ▶ 파트 1 (9시반 ~ 11시반) 1. 알고리즘 1문제 풀기 (배열, 스택, 큐를 이용해서 풀음) 2. 시간되면 DB 9.2.3 정리 ▶ 파트 2 (4시 ~ 12시) 1. 프로젝트 패키지 구성 고민 좀 해보자 2. DB 설계 (순차적으로 그리고 회고 작성) 3. mysql CH.9 4. 자기소개서 수정 2022. 4. 26.
2022.04.26의 기록 ▶ 파트 1 (10시 ~ 11시 10분) 1. 테스트 코드 최종 수정 2. 추후 계획 정리 3. 보건증 발급 및 알바 준비 ▶ 파트 2 (3시 ~ 12시) 1. 스프링 부트 프로젝트 생성 후 깃 연동 (이건 이제 안 까먹겠다..) 2. 자기소개서 수정 3. mysql 질문 정리 및 CH 8, 9(9.2.3 전까지) 정리 4. 알고리즘 고득점 키트 - 해시 5. mysql workbench 설치 ▶ 최근 이슈 1. 시간 부족 => 학원 수료해서 시간이 많이 날줄 알았는데 생각보다 적은 것 같다.. > 원인 : 운동 갔다 오는 시간, 알바 시간 > 해결 : 1시간만 더 일찍 일어나 보자, 운동은 짧고 굵게. 2. 테스트 코드 => 자바 프로젝트 후 테스트 코드를 작성하며 TDD 방식을 조금이나마 깨닫게 되었.. 2022. 4. 26.
2022.04.25의 기록 ▶ 파트 1 (2시 ~ 12시) 1. 테스트 코드 수정 2. 노션 자기소개서 정리 -> 디테일한 부분 추가해보자 3. Spring 개념 정리 4. mysql 옵티마이저와 힌트 5. wiki 수정 6. 개념, 자소서, 프로젝트 계획 검수 7. 알고리즘 1문제 ▷ 테스트 코드 문제 : 하나의 값만 임의로 비교하는 것도 좋을 것 같지만 3가지 경우를 모두 테스트하면 좋겠다 해결 : Static 메서드를 하나 선언하여 입력 정수 값과 기대 값을 비교하는 테스트로 수정하였다. 2022. 4. 25.
2022.04.24의 기록 ▶ 해야할 일 1. Gradle test code 수정 2. mysql CH7. 데이터 암호화 정리, CH8. 인덱스 중간 3. Boot 프로젝트 구상 (점심 먹고 쏟아붇자) https://github.com/GroovyArea/Shop-with-SpringBoot/wiki 4. 알고리즘 1문제 ▷ 테스트 코드 문제 1 : gameCount()를 호출 할 때마다 예외가 발생됨 해결 : 제어문을 통해 해결 문제 2 : @ParameterizedTest 진행 시 파라미터를 메서드의 매개변수로 집어넣어주지 않아 테스트 코드 문제 발생 2022. 4. 24.
2022.04.22의 기록 ▶ 파트 1 (10시 ~ 7시) 1. Gradle Test 코드 수정 (PrintGameResult, ComputerNumber 부분) 2. 자소서 수정 3. Boot project 구상 4. Spring MVC 내부 개념 정리 5. 알고리즘 1문제 (2문제) 6. mysql Ch5. 트랜잭션, CH6. 데이터 압축 7. 이펙티브 자바 아이템 1 정리 ▷ 알고리즘 문제 : 정수의 내림차순 정렬 import java.util.Arrays; class Solution { public long solution(long n) { long answer = 0; String number = String.valueOf(n); String stringNum = ""; char[] numArr = new char[num.. 2022. 4. 22.
2022.04.21의 기록 ▶ 파트 1 (1시 ~ 8시) 1. Gradle Test 코드 수정 (테스트 코드 목적에 맞게) 2. 노션 이력서 3. Boot Project Wiki 4. Spring MVC 내부 개념 정리 ▶ 파트 2 (9시 ~ 2시) 1. 알고리즘 1문제 (꽂혀서 4문제 품) 2. Mysql CH4. 아키텍쳐 ▷ 알고리즘 > 문제점 : 코드실행은 정상적인데 채점에서 실패한다. > 새로 알게 된 사실 : 문제를 풀 때 메모리와 걸리는 시간도 체크하는 것 같다.. > 문제 : 배열 중 제일 작은 수 제거하고 없다면 -1을 반환 > 내가 처음 푼 방식 : 배열은 인덱스를 지우는 방식이 없으므로 List로 만들어서 내림차순 정렬 후 제거하고 다시 오름차순으로 했다. 완전 절차지향식 > sort는 되도록 삼가하는 것이 좋덴.. 2022. 4. 21.
2022.04.20 의 기록 ▶ 오늘 하루 계획 파트 1 (11시 ~ 2시) 1. Gradle MVC 프로젝트 테스트 코드 리팩토링 2. Mysql 3단원 정리 파트 2 (3시 ~ 1시) 1. 스프링MVC 개념 정리 : 핸들러 추상클래스로 왜 이루어져 있는지 고민해보자 3개 2. 스프링부트 프로젝트 WIkI 정리 3. 노션 이력서 템플릿 및 초안 작성 4. 도커 2문서 5. 알고리즘 1문제 2022. 4. 20.
반응형