데이터베이스
-
인덱스 온리 스캔 불가능데이터베이스/최적화 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 값을 얻기 위해 실제 테이블 데이터를..
-
쓰기락 for update 사용시 주의점 (mysql,postgresql)데이터베이스 2024. 7. 11. 09:49
FOR UPDATE를 사용할 때 조건절에 인덱스가 있다면 인덱스를 사용하여 조건에 맞는 행들을 찾고 그 행들에 대해 잠금을 겁니다. 따라서, 인덱스 스캔 조건에 맞는 모든 행에 잠금이 걸립니다. 이는 결과 집합의 크기와 상관없이 조건에 맞는 모든 행이 잠금이 걸리는 것을 의미합니다. MySQL 예시예를 들어, 다음과 같은 쿼리가 있다고 가정해봅시다: SELECT * FROM your_tableWHERE indexed_column = some_value AND another_column = another_valueFOR UPDATE; 여기서 indexed_column에 인덱스가 있고, another_column에는 인덱스가 없다고 가정합니다.인덱스가 있는 indexed_column을 사용하여 먼저 조건을..
-
postgresql 실행계획 - recheck cond - 수정중데이터베이스/postgresql 2024. 5. 16. 11:51
Contents --> recheck condPostgreSQL 실행 계획에서 "recheck condition"은 조인 또는 필터 조건을 다시 확인해야 하는 경우를 가리킵니다. 이는 PostgreSQL이 레코드를 검색하거나 조인할 때 초기에는 조건을 충족하는 것처럼 보이지만, 후속 단계에서 다시 확인해야 하는 상황을 의미합니다.예를 들어, 인덱스 스캔을 사용하여 조인 또는 필터링을 수행할 때, PostgreSQL은 인덱스를 사용하여 먼저 레코드를 필터링합니다. 그러나 인덱스만으로는 완전한 결과를 보장할 수 없는 경우가 있습니다. 따라서 PostgreSQL은 해당 레코드를 다시 확인하여 추가적인 조건을 충족하는지 확인합니다.이러한 "recheck condition" 단계는 성능에 영향을 줄 수 있으므로..
-
short query , long query 란 무엇인가? sql최적화 팁 - 수정중데이터베이스/postgresql 2024. 5. 13. 13:49
첫 번째 단계는 쿼리가 짧은 쿼리인지 긴 쿼리인지 식별하는 것입니다. 이 장에서는 짧은 쿼리를 최적화하는 데 중점을 둡니다. 짧은 쿼리를 식별하는 방법, 짧은 쿼리에 사용할 최적화 기술, 이 쿼리 유형에 인덱스가 매우 중요한 이유를 배우게 됩니다. 또한 PostgreSQL에서 사용할 수 있는 다양한 유형의 인덱스와 각 인덱스 유형을 사용할 수 있는 경우에 대해서도 설명합니다. 이 챕터를 진행하기 전에 몇 가지 추가 인덱스를 만들어 보겠습니다 SELECT d.airport_code AS departure_airport, a.airport_code AS arrival_airportFROM airport a, airport dLong query 1-1SELECT f.flight_no, f.scheduled..
-
POSTGRES 테이블 인덱스 - 정리데이터베이스/postgresql 2024. 5. 10. 12:01
Contents --> 인덱스(INDEX)란? • 중복 데이터 구조• 응용 프로그램에 표시되지 않음 • 특정 기준에 따라 데이터 선택 속도를 높이도록 설계 중복성은 데이터 손실 없이 인덱스를 삭제할 수 있고 다른 곳(물론 테이블)에 저장된 데이터에서 재구성할 수 있음을 의미합니다. 응용 프로그램 표시되지 않음은 인덱스가 있는지 여부를 감지할 수 없음을 의미합니다. 즉, 모든 쿼리는 인덱스가 있든 없든 동일한 결과를 생성합니다. 마지막으로, 인덱스는 특정 쿼리 또는 (더 나은!) 여러 쿼리의 성능을 향상시킬 수 있다는 확신으로 만들어집니다. 인덱스 오버헤드 성능 이슈 테이블 인덱스는 테이블이 추가될떄마다 인덱스 테이블도 추가된다. 그러므로 많은 인덱스를 설정할경우 insert 성능 이슈가 있을수있다...
-
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을 전달받..