본문 바로가기
728x90

카테고리252

[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.
final 키워드를 사용하면 좋은 점. 변경 불가능성: final 변수는 값을 한번 할당하면 변경이 불가능해집니다. 이로 인해 의도치 않은 값의 변경이나 버그를 방지할 수 있습니다. 안전한 다중 스레드 환경: final 변수는 다중 스레드 환경에서 안전합니다. final 변수는 한 번 초기화되면 이후에 값이 변경될 수 없으므로, 다른 스레드에서 값을 변경할 가능성이 없습니다. 상수 값 정의: final 변수는 상수 값의 정의에 사용될 수 있습니다. 예를 들어, Math.PI와 같은 상수 값은 final로 선언됩니다. 성능 향상: final 변수는 컴파일러에게 추가적인 정보를 제공하므로, 컴파일러가 최적화 작업을 더 잘 수행할 수 있습니다. 또한 final 변수는 컴파일 타임 상수 폴딩(constant folding)을 가능하게 하고, 해당 변.. 2023. 2. 22.
람다, 익명클래스는 왜 final 또는 effectively final 에만 접근 가능할까? 람다식은 메서드 내부에서 익명으로 생성되는 객체이므로, 해당 객체가 생성될 때 외부에서 참조하는 변수들은 반드시 final 또는 사실상 final과 동등한 효과를 가져야 한다. 람다식이 정의된 블록의 외부 변수를 캡처하는 방식에 기인하는데, 람다식에서 사용하는 외부 변수는 내부적으로 해당 변수를 참조하는 final 필드를 생성하게 되며, 이렇게 final 필드로 새엉된 참조 변수를 통해서만 해당 변수에 접근할 수 있다. 즉 람다는 내부에서 참조하는 변수가 final로 선언된 경우에만 참조할 수 있다. 람다식이 실행되는 시점에 해당 변수의 값이 이미 정해져 있기 때문에 람다식 내부에서 참조하는 변수가 변경될 가능성이 있으면 해당 변수를 final 로 선언하면 안되며, 다른 방법으로 값을 전달해야 하는데, .. 2023. 2. 22.
자바 클로저에 대한 짧은.. 클로저는 다른 함수의 스코프에 있는 변수를 참조하고 저장할 수 있는 함수를 말한다. 자바에서는 함수를 일급 객체로 다룰 수 있게 됩니다. import java.util.function.Supplier; public class ClosureExample { public static void main(String[] args) { // 클로저를 이용한 간단한 덧셈 함수 예시 int a = 10; int b = 20; Supplier adder = () -> a + b; System.out.println("Result: " + adder.get()); // Result: 30 // 클로저를 이용해 값을 변경하는 예시 int c = 5; Runnable updater = () -> { c++; // 클로저가 참.. 2023. 2. 22.
아 이게 맞는가 싶다.. 공부하고 정리하는걸 좋아는 하는데..그래서 따로 노트 앱에 정리도 하지만.. 블로그는 특정인이 볼 수 있다는 생각에 막 정리할수도없고.. 정리를 하자니..여러 책을 동시에보면서 진도도 느리게 나가고... 흐음~_~내 실력이 부족해서 그런듯 하다.. 정리는 당분간 멈추던지, 생각만 정리하던지 아님 정리를 조금 단순하게 하던지..조금 생각해 봐야겠다.. 하지만~~정리를 좀 해노면 나중에 복습할때 편하긴한데..흐음....흐음~~ 2023. 2. 22.
mysql 스토리지 엔진 MyISAM vs InnoDB 트랜잭션 지원 여부 MyISAM은 트랜잭션을 지원하지 않습니다. InnoDB는 트랜잭션을 지원하며, ACID(원자성, 일관성, 고립성, 지속성)를 보장합니다. 락(LOCK) 방식 MyISAM은 전체 테이블 락 방식을 사용합니다. 따라서 동시에 여러 개의 쓰기 작업이 일어날 경우 성능이 저하될 수 있습니다. InnoDB는 행 락 방식을 사용합니다. 따라서 여러 개의 쓰기 작업이 동시에 일어날 경우 성능이 향상될 수 있습니다. 외래키(Foreign Key) 지원 여부 MyISAM은 외래키(Foreign Key)를 지원하지 않습니다. InnoDB는 외래키(Foreign Key)를 지원합니다. 데이터 일관성 MyISAM은 데이터 일관성을 보장하지 않습니다. 따라서 데이터의 무결성이 중요한 경우에는 사용하지 않는.. 2023. 2. 22.
이펙티브 자바 3/E 이펙티브 코틀린 보다 어려운거 같다. 내용도 이펙티브 코틀린이 좀 더 짧아 더 빨리 본거 같은데.. 생각보다 잘 안읽힌다..(실력이 부족함을 느낍니다..) 1-2번 읽어가지고는 다 기억도 못할듯하다..도저히 이해 안가는 부분도 있지만, 최대한 곱씹어봐야겠다. 아직 절반 정도뿐이 못읽었지만.. 배운거도 많고, 부족함을 느끼는 부분도 많았다. 확실히 알면 좋은것들이 많으나, 엄청 와닿지 않는 부분도 있다.. 개인점수는 8 / 10 이다. 장점: 알면 좋은것들이 확실하다.모르는게 많아서 좀 더 공부하게 된다. 단점: 개인실력차에 따라 다르겠지만, 술술 읽히진 않는다. 총평: 자바하는 개발자라면..언젠가는 한번 쯤 넘어야 할 산이 아닐까. 2023. 2. 17.
728x90