일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- hashcode
- 필드 주입
- jwt
- select_type
- static
- 조합
- docker
- DDL
- 열 속성
- 재정의
- Test
- DI
- AOP
- java
- jpa
- stream
- lambda
- equals
- 생성자 주입
- MSA
- StringBuilder
- Spring
- 바이너리 카운팅
- redis
- VUE
- 테스트 코드
- cache
- 인덱스
- SQL
- KEVISS
- Today
- Total
목록독서/업무에 바로쓰는 SQL 튜닝 (9)
백엔드 개발자 블로그
1. 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문2. 메인 테이블에 계속 의존하는 나쁜 SQL 문3. 불필요한 조인을 수행하는 나쁜 SQL 문 1. 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문튜닝 전SELECT 매핑.사원번호, 부서.부서번호FROM 부서사원_매핑 매핑, 부서WHERE 매핑.부서번호 = 부서.부서번호 AND 매핑.시작일자 >= '2002-03-01'; 1341 rows, 13.2 sec 튜닝 전 실행 계획 튜닝 2. 메인 테이블에 계속 의존하는 나쁜 SQL 문 3. 불필요한 조인을 수행하는 나쁜 SQL 문
1) 서브쿼리 위치에 따른 SQL 용어2) 메인쿼리와의 관계성에 따른 SQL 용어3) 반환결과에 따른 SQL 용어4) 조인 연산방식 용어5) 조인 알고리즘 용어 1) 서브쿼리 위치에 따른 SQL 용어스칼라 서브쿼리스칼라 서브쿼리 결과는 무조건 데이터 1건인라인 뷰인라인 뷰의 결과는 내부적으로 메모리 또는 디스크에 임시 테이블을 생성해 활용중첩 서브쿼리보통 비교 연산자를 비롯해 IN,EXISTS,NOT IN,NOT EXISTS 많이 사용2) 메인쿼리와의 관계성에 따른 SQL 용어비상관 서브쿼리메인쿼리&서브쿼리 간에 관계성이 없음서브쿼리가 실행된 뒤 메인쿼리에게 그 결과를 던져주는 형태서브쿼리 실행 -> 메인쿼리 실행select *from 학생where 학번 in (select 학번 from 학생 where..
1) 기본 실행 계획 수행2) 기본 실행 계획 항목 분석3) 좋고 나쁨을 판단하는 기준4) 확장된 실행 계획 수행 1. 기본 실행 계획 수행1) 실행계획 확인 명령어EXPLAIN SQL문;DESCRIBE SQL문;DESC SQL문;2) MySQL, MariaDB 에서 실행 계획둘 다 EXPLAIN,DESCRIBE,DESC 사용 가능MariaDB 10.05 버전 이상에서는 UPDATE,DELETE 문에서도 실행 계획 확인 가능2. 기본 실행 계획 항목 분석1) id조인순서를 알 수 있음EXPLAINSELECT 사원.사원번호, 사원.이름, 사원.성, 급여.연봉, (SELECT MAX(부서번호) FROM 부서사원_매핑 as 매핑 WHERE 매핑.사원번호 = 사원.사원번호) 카운트FRO..
테이블 및 열의 속성을 변경하여 튜닝해보자잘못된 열 속성으로 비효율적으로 작성한 나쁜 SQL 문1. 튜닝 전SELECT 부서명, 비고FROM 부서WHERE 비고 = 'active' AND ASCII(SUBSTR(비고,1,1)) = 97 AND ASCII(SUBSTR(비고,2,1)) = 99; 2. 튜닝 전 실행 계획 분석각 조건절 실행해서 소문자 여부를 판단하려고 한다는 것을 알았음소문자 여부를 판단하려고 굳이 아스키 코드를 추출하는 함수까지 사용해야 될까?? 3. 튜닝열의 콜레이션 변경 (utf8_genereal_ci > UTF8MB4_bin) > substr(), ascii() 함수가 수행하던 불필요한 작업 제거ALTER TABLE 부서CHANGE COLUMN 비고 비고 VARCHAR(40) N..