728x90 공부158 [RealMysql 8.0] 실행 계획 10 ~ 1편 끝 참고: https://jeong0427.tistory.com/43 실행 계획 확인 8.0 버전부터는 explain 명령에 사용할 수 있는 새로운 옵션이 추가됐다. 쿼리의 실행 시간 확인 explin analyze 실행 계획 분석 id 칼럼 하나의 select 문장은 다시 1개 이상의 sub select 문장을 포함할 수 있다. 여러개의 테이블이 조인되는 경우에는 id 값이 증가하지 않고 같은 id 값이 부여된다. id 칼럼이 테이블의 접근 순서를 의미하지는 않는다. explain format=tree 명령으로 확인해보면 순서를 더 정확히 알 수 있다. select_type 칼럼 select 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼이다. simple union 이나 서브쿼리를 사용하지 않는 단순한 sel.. 2023. 2. 27. [RealMysql 8.0] 고급 최적화 9.3 ~ 9.4.12 고급 최적화 옵티마이저 옵션은 크게 조인 관련된 옵티마이저 옵션과, 옵티마이저 스위치로 구분할 수 있다. 옵티마이저 스위치 옵션 MRR과 배치 키 엑세스(mrr & batched_key_access) 블록 네스티드 루프 조인 인덱스 컨디션 푸시다운 인덱스 확장 인덱스 머지 인덱스 머지 - 교집합 인덱스 머지 - 합집합 인덱스 머지 - 정렬 후 합집합 세미 조인 테이블 풀-아웃 퍼스트 매치 루스 스캔 구체화 중복제거 컨디션 팬아웃 파생 테이블 머지 인비저블 인덱스 스킵 스캔 해시 조인 인덱스 정렬 선호 조인 최적화 알고리즘 Exhaustive 검색 알고리즘 쿼리 힌트 인덱스 힌트와 옵티마이저 힌트로 나눌 수 있다. 인덱스 힌트 straight_join, use index 등을 포함한 인덱스 힌트들은 모두 .. 2023. 2. 27. [RealMysql 8.0] 옵티마지어와 힌트 9 ~ 9.2 옵티마이저는 기본 데이터를 비교해 최적의 실행 걔획을 수립하는 작업을 한다. 개요 mysql 서버에서 쿼리가 실행되는 과정은 크게 세 단계로 나눌 수 있다 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 mysql 서버가 이해할 수 있는 수준으로 분리(파스 트리)한다. sql 파싱 이라고 하며 mysql 서버의 sql 파서 라는 모듈로 처리한다. sql 문장이 문법적으로 잘못됐다면 이 단계에서 걸러진다. sql 파스 트리가 만들어 진다.mysql 서버는 sql 문장 그 자체가 아니라 sql 파스 트리를 이용해 쿼리를 실행한다. SQL의 파싱 정보(파스 트리)를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다. 첫 번째 단계에서 만들어진 sql 파스 트리를 참조하면서 다음과 같.. 2023. 2. 26. [RealMysql 8.0] 외래키 8.10 ~ 8.10.2 외래키 InnoDB 의 왜래키 관리에는 중요한 두 가지 특징이 있다. 테이블의 변경(쓰기 잠금)이 발생하는 경우에만 잠금 경합(잠금 대기)이 발생한다. 외래키와 연관되지 않은 칼럼의 변경은 최대한 잠금 경합(잠금 대기)을 발생시키지 않는다. 자식 테이블의 변경이 대기하는 경우 작업번호 커넥션-1 커넥션-2 1 BEGIN; 2 update tb_parent set fb='changed-2" where id =2 3 BEGIN; 4 update tb_child set pid = 2 where id = 100; 5 ROLLBACK; 6 Query OK, 1 row affected (*.** sec) - 테이블의 변경(쓰기 잠금)이 발생하는 경우에만 잠금 경합(잠금 대기)이 발생한다. 2번 커넥션 1 수행시 t.. 2023. 2. 26. mysql 스토리지 엔진 MyISAM vs InnoDB 트랜잭션 지원 여부 MyISAM은 트랜잭션을 지원하지 않습니다. InnoDB는 트랜잭션을 지원하며, ACID(원자성, 일관성, 고립성, 지속성)를 보장합니다. 락(LOCK) 방식 MyISAM은 전체 테이블 락 방식을 사용합니다. 따라서 동시에 여러 개의 쓰기 작업이 일어날 경우 성능이 저하될 수 있습니다. InnoDB는 행 락 방식을 사용합니다. 따라서 여러 개의 쓰기 작업이 동시에 일어날 경우 성능이 향상될 수 있습니다. 외래키(Foreign Key) 지원 여부 MyISAM은 외래키(Foreign Key)를 지원하지 않습니다. InnoDB는 외래키(Foreign Key)를 지원합니다. 데이터 일관성 MyISAM은 데이터 일관성을 보장하지 않습니다. 따라서 데이터의 무결성이 중요한 경우에는 사용하지 않는.. 2023. 2. 22. [이펙티브자바]item 33.타입 안전 이종 컨테이너를 고려하라. 아이고 어렵네~ 타입 안전 이종 컨테이너: 한 타입의 객체만 담을 수 있는 컨테이너가 아니라, 여러 다른 타입을 담을 수 있는 타입 안전한 컨테이너. 구현방법: 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화환 키를 함께 제공하면 된다. 2023. 2. 17. 백준 2839 자바. 가끔 문제의 난이도를 떠나 생각나게 하는 코드들이 있다. 내가 제일 좋아하는 문제는 따로 있긴한데,,여튼..코드를 보자.. 풀이코드: public class _2839 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); int count = -1; for (int i = num / 5; i >= 0; i--) { int remain = num - (i * 5); if (remain % 3 == 0) { count = i + (remain /.. 2023. 2. 17. [이펙티브자바]item 32.제네릭과 가변인수를 함께 쓸 때는 신중하라. varargs 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다. public class Dangerous { static void dangerous(List... stringLists) { List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCastException } public static void main(String[] args) { dangerous(List.of("There be dragons!")); } } 매개변수화 타입의 변수가 다른 객체를 참조하면 힙 오염이 발생한.. 2023. 2. 16. [이펙티브자바]item 31.한정적 와일드카드를 사용해 API 유연성을 높이라. 우선 읽고 가자. 불변성(무공변성, invariant) 상속 관계에 상관없이 자신의 타입만 허용하는 것을 뜻한다. Kotlin 에서는 따로 지정해주지 않으면 기본적으로 모든 Generic Class 는 무공변이다. Java 에서의 와 같다. 공변성(covariant) 자기 자신과 자식 객체를 허용한다. Java 에서의 와 같다. Kotlin 에서는 out 키워드를 사용해서 이를 표시한다. 반공변성(contravariant) 공변성의 반대 - 자기 자신과 부모 객체만 허용한다. Java 에서의 와 같다. Kotlin 에서는 in 키워드를 사용해서 표현한다. 매개변수화 타입은 불공변이다 즉 서로 다른 타입 Type1과 Type2가 있을때 List은 List의 하위 타입도 상위 타입도 아니다 ex) List은.. 2023. 2. 15. 이전 1 ··· 7 8 9 10 11 12 13 ··· 18 다음 728x90