💡 소프트 파싱과 하드 파싱의 차이점
소프트 파싱 vs 하드 파싱
SGA(system global area)란?(오라클에서)
- 먼저 라이브러리 캐시에 존재하는지 확인
- 존재하면 실행 단계로 넘어감 (소프트 파싱)
- 존재하지 않으면 최적화 (하드 파싱) ⇒ 하드라고 하는 이유는 최적화 자체가 매우 무겁고 복잡하기 때문에
Buffer Pool(oracle 의 sga와 비슷한 개념)
- 버퍼 풀은 InnoDB가 액세스 할 때 테이블 및 인덱스 데이터를 캐시하는 메인 메모리 영역
바인드 변수의 중요성
# 프로시저, 트리거, 패키지 등은 이름이 있다. => A
create procedure A() {}
# sql은 텍스트가 이름 역할
select * from store
SELECT * from store
파라미터 Driven 방식으로 SQL을 작성하는 방법이 제공되는데, 바인드 변수를 사용하면 된다.
- 만약 프로그램을 “SELECT * FROM CUSTOMER WHERE LOGIN_ID = ‘” + login_id + “’” 이렇게 적었다면?
- SELECT * FROM CUSTOMER WHERE LOGIN_ID = ‘A’ SELECT * FROM CUSTOMER WHERE LOGIN_ID = ‘B’ … 모든 sql을 라이브러리 캐시에 저장하고 재사용하지 못함
- 만약 프로그램을 “SELECT * FROM CUSTOMER WHERE LOGIN_ID = ?” 라고 적었다면?
- SELECT * FROM CUSTOMER WHERE LOGIN_ID = :1 하드 파싱은 1번만 일어나고 캐싱된 SQL 재사용
JPA에서는 아래처럼 제공된다.
SELECT m FROM Member m WHERE m.username = ?0 (위치 기반)
SELECT m FROM Membeer m WHERE m.username = :name (이름 기반)
@Query(”select s from store s where [s.id](<http://s.id>) = :storeId”)
즉 기본적으로 바인딩을 제공한다.
출처 및 참고 블로그
- https://one-zero.tistory.com/entry/Oracle-SGASystem-Global-Area
- https://goddaehee.tistory.com/64
- https://owlyr.tistory.com/23
'책 > 친절한 sql 튜닝' 카테고리의 다른 글
2장. 인덱스 - 인덱스 확장 기능 사용법 (0) | 2023.03.27 |
---|---|
2장. 인덱스 - 인덱스 기본 사용법 (0) | 2023.03.27 |
2장. 인덱스 - 인덱스 구조 및 탐색 (0) | 2023.03.27 |
1장. SQL 처리 과정과 IO - 데이터 저장 구조 및 I/O 매커니즘 (0) | 2023.03.27 |
1장. SQL 처리 과정과 IO - SQL 파싱과 최적화 (0) | 2023.03.27 |