스터디

❌ 문제의 SQL문select distinct 사원.사원번호, 사원.이름, 사원.성, 부서관리자.부서번호from 사원join 부서관리자 on (사원.사원번호 = 부서관리자.사원번호);  📉 이게 왜 문제일까? 실행계획을 살펴보자.- id가 모두 1인것으로 보아 join한 관계이다.- 부서관리자 type : index -> 풀스캔- 사원 테이블 type : eq_ref -> 사원 테이블의 기본키(사원번호)를 사용- Extra : Using temporary -> distct를 위한 별도의 임시테이블 사용+----+-------------+-----------------+------------+--------+---------------+----------------+---------+-----------..
❌ 문제의 SQL문SELECT * FROM 사원WHERE CONCAT(성별, ' ', 성) = 'M Radwan'; 📉 이게 왜 문제일까? 실행계획을 살펴보자.type -> 테이블 풀스캔약 30만개를 스캔하였고, 실제 데이터는 102개를 가져왔다.+----+-------------+--------+------------+------+---------------+------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------..
❌ 문제의 SQL문아래는 사용 여부가 1인 급여 개수를 구하는 쿼리이다.약 42000개가 탐색됨.select count(1)from 급여where 사용여부 = 1; 금여 테이블과 인덱스는 아래와 같이 설정되어 있다.인덱스사원번호 + 시작일자 PK사용여부  📉 이게 왜 문제일까? 실행계획을 살펴보자.key : 사용여부 항목을 인덱스로 사용함.type : index → 인덱스 풀 스캔rows : 283만사실상 모든 인덱스 테이블 행을 탐색했음.filterd : 10 → 엔진으로부터 가져온 데이터 중 10%를 추출해서 최종 데이터를 출력할 예정.+----+-------------+--------+------------+-------+----------------+----------------+--------..
❌ 문제의 SQL문SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(1) 건수FROM 사원GROUP BY IFNULL(성별, 'NO DATA');  📉 이게 왜 문제일까? 실행계획을 살펴보자.type : 인덱스 풀스캔Extra : Using temporary -> 임시테이블 만들어서 사용IFNULL() 처리를 위해 임시테이블을 만들었다.+----+-------------+--------+------------+-------+---------------+--------------+---------+------+--------+----------+------------------------------+| id | select_type | table | partitions | ty..
4장에는 실제 잘못된 SQL문과 개선된 SQL문을 보여주며 소개해주고 있다.팀원과 한 파트씩 나눠가면서 발표하며 스터디를 진행하로 했고, 오늘은 첫번째 사례이다. ❌ 문제의 SQL 문사원 테이블/ 현재 걸린 인덱스 참고하려면 아래 더보기 클릭더보기+--------------+--------------+-----------+----------+--------+--------------+| 사원번호 | 생년월일 | 이름 | 성 | 성별 | 입사일자 |+--------------+--------------+-----------+----------+--------+--------------+| 10001 | 1953-09-02 | Ge..
실습 데이터 세팅교재에 나와있는 github 링크에서 sql 파일을 다운받았다. 실습을 위해 도커로 MySQL 8.4버전 컨테이너로 띄움명령어 : docker run --name mysql-study -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306docker 환경에 mysql 8.4버전 실행중이고, 받은 파일을 아래 명령어를 통해 docker 컨테니어 내부로 복사해줬다.명령어 : docker cp [다운받은 복사할 폴더] [컨테이너id]:/init-db 그럼 아래처럼 docker 컨테이너 접속하고 cd init-db 후 ls해보면 실습 sql파일이 복사되었다.mysql -u root -p (아래는 미리생성해준 mysql_study DB에 넣어보려고 했는데, sql이 ..
MySQL을 기준으로 스터디 합니다.물리엔진 용어MySQL 구성요소MySQL 엔진SQL문을 토대로 문법검사등을 수행하고, SQL을 최소 단위로 분리한다.데이터를 빠르게 찾을 수 있는 경로를 탐색한다.(최적화 경로 탐색)스토리지 엔진으로 부터 받은 데이터를 가공 및 연산(필터링 join 등) 한다.스토리지 엔진(ex InnoDB)요청받은 SQL문을 토대로 디스크나 메모리에서 필요한 데이터를 가져오고, MySQL 엔진으로 보내줌스토리지 엔진에 따라 쓰기효과, 빠르게 읽는 효과 등 다를 수 있으므로 적절한 스토리지 엔진을 선택해야함.  이 책은 MySQL 8.0  버전의 InnoDB 엔진 기준으로 설명하고 있다. 파서(parsor) : 사용자가 요청한 SQL문을 쪼개 최소 단위로 분리하고 트리를 만든다.(문법..
코틀린 DSL 관련 내용이 많이 나오는데, 이부분은 생략하고 추후에 따로 공부해야할 듯 하다. 아이템 11. 가독성을 목표로 설계하라아래의 코드를 보면 일반적으로 A의 코드가 B보다 읽기 쉽다.B의 코드는 코틀린에서 자주 사용하는 구문들을 사용했음에도, 코틀린 숙련자들도 읽기 쉽지 않다.// 1. 읽기 쉽다if (person !- null && person.isAdult) { view.showPerson(person)} else { view.sohwError()}// 2. 읽기 어렵다person?.takeIf { it.isAdult } ?.let(view::showPerson) ?: view.showError() A의 구문은 B보다 아래와 같은 장점이 있다.- 읽기 쉽다.- 디버깅이 용이하다...
Don't stop 훈
'스터디' 카테고리의 글 목록