데이터베이스/최적화
-
DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것데이터베이스/최적화 2024. 7. 22. 11:32
MyBatis와 같은 ORM 툴을 사용할 때, 동일한 데이터를 가져오기 위해 5번의 쿼리를 호출하는 것과 5개의 쿼리를 WITH 구문을 통해 하나의 쿼리로 요청하는 것 사이에는 성능상의 차이가 있습니다. 이 차이가 발생하는 이유는 여러 가지가 있지만, 주요 원인은 다음과 같습니다: 네트워크 레이턴시:각 쿼리 호출 시마다 네트워크 요청이 발생합니다. 네트워크 왕복 시간이 누적되면 지연이 발생할 수 있습니다. 커넥션 풀을 사용해도 각 요청마다 네트워크 레이턴시가 존재하기 때문에, 5번의 네트워크 왕복 시간이 1번의 왕복 시간보다 더 큽니다.쿼리 실행 준비:각 쿼리 호출 시마다 데이터베이스는 쿼리 파싱, 최적화, 실행 계획 수립 단계를 거쳐야 합니다. 5번의 쿼리 호출은 이 단계를 5번 반복하는 셈이 됩니다..
-
인덱스 온리 스캔 불가능데이터베이스/최적화 2024. 7. 17. 09:29
인덱스 온리 스캔은 쿼리에서 필요한 모든 데이터가 인덱스에 포함되어 있을 때만 가능하며, 그렇지 않은 경우 실제 테이블 데이터를 읽기 위해 디스크 접근이 필요합니다. SELECT name, age, phoneFROM example_tableWHERE name = 'Alice' AND age = 30; 상황 설명인덱스 온리 스캔 불가: 위 쿼리는 name과 age뿐만 아니라 phone 컬럼도 필요로 합니다. 하지만 인덱스 idx_name_age는 name과 age만 포함하고 있으며 phone은 포함하지 않습니다.테이블 접근 필요: 쿼리에서 phone 컬럼의 값도 필요하므로, 인덱스를 사용하여 name과 age에 대한 조건을 만족하는 행을 찾은 후, 해당 행의 phone 값을 얻기 위해 실제 테이블 데이터를..
-
SQL 인덱스 기본 사용법 - 수정중데이터베이스/최적화 2024. 5. 2. 22:31
수직적 탐색 :수평적 탐색 : 인텍스를 정상적으로 사용한다?인덱스를 정상적으로 사용한다는것은 리프 블록에서 스캔 시작점을 찾고 거기서부터 스캔하다가 중간에 멈추는것을 의미한다. OR 조건 검색수직적 탐색을 통해 전화번호가 '01022222222'이거나 고객명이 '홍길동' 인 어느 한 시작지점을 바로 찾을수 없다따라서 인덱스를 어떤 방식을 구성해도 Range Scan을 할수없다where (전화번호 = :tel_no OR 고객명 = :cust_nm) 위와같은 쿼리는 select *from 고객where 고객명 = :cust_nmunion allselect *from 고객where 전화번호 =:tel_noand (고객명 :cust_nm or 고객명 is null) 로 변경하면 인덱스를 타고 이것을 OR E..
-
SQL?옵티마이저?프로시저?SQL최적화 방법?소프트파싱?하드파싱?는 무엇일까? with oracle데이터베이스/최적화 2024. 4. 8. 22:16
본 포스팅은 '친절한 SQL 튜닝' 책을 보고 정리한 내용입니다. Contents SQL란? SQL은 Structured Query Language의 줄임말이다. 말그대로 구조적 질의언어이다. 프로시저란? SQL은 기본적으로 구조적 집합적이고 선언적 질의언어이다. 프로시저는 이러한것들을 결과 집합을 만드는 역할을한다. 옵티마이저란? 프로시저를 만들어내는 DBMS 내부 엔진이며, 옵티마이저가 존재하지 않았을때 사람이 직접 프로시저를 코드로 짜서 데이터를 출력했다. 하지만 옵티마이저가 등장함으로써 사람대신 프로시저 프로그래밍을 직접 해준다. SQL최적화란? DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전과정을 'SQL최적화'라고한다. 1.SQL 파싱 사용자로부터 SQL을 전달받..