본문 바로가기

전체 글262

인덱스 튜닝 1 SQL 튜닝은 랜덤 I/O와의 전쟁 SQL 성능 향상을 위해 DBMS가 제공하는 많은 기능이 느린 랜덤 I/O를 극복하기 위해 개발됐고, 조인 메소드의 발전뿐만아니라 많은 튜닝 기법도 랜덤 I/O 최소화가 목적 테이블 랜덤 액세스 관리적인 측면을 제외하고 성능적 측면에서 파티션을 분리하는 이유 인덱스로 검색해도 빠른데 굳이 테이블 파티셔닝을 하는 이유는? 인덱스 ROWID는 물리적 주소? 논리적 주소? 인덱스를 스캔하는 이유는 검색 조건을 만족하는 소량의 데이터를 인덱스에서 빨리 찾고 거기서 테이블 레코드를 찾아가기 위한 주소값, 즉 ROWID를 얻으려는 목적이다. 인덱스 ROWID는 데이터파일 번호, 오브젝트 번호, 블록 번호같은 물리적 요소로 구성되어 있지만 테이블 레코드를 찾아가기 위한 논리적 주소.. 2024. 2. 23.
카디널리티(Cardinality)와 선택도(Selectivity) 카디널리티(Cardinality, 기수성)는 특정 데이터 집합의 유니크(Unique)한 값의 개수이다. 예를 들어 데이터베이스의 '성별' 컬럼의 경우 남자와 여자라는 값만 가지기 때문에 카디널리티는 2다. 반면에 주민등록번호는 모든 레코드가 고유한 값을 가지기 때문에 전체 레코드 개수와 카디널리티는 일치한다. ​ 선택도는 카디널리티로부터 다음과 같이 계산할 수 있다. 선택도 = 카디널리티 / 전체 레코드 수 따라서 선택도는 0~1사이의 값이며, 1일 때 모든 값이 유니크하다는 뜻이다. ​ ​ 인덱스의 카디널리티(Cardinality)도 모든 인덱스 키값 가운데 유니크한 값의 수를 의미한다. 전체 인덱스 키값은 100개인데, 그중에서 유니크한 값의 수는 10개라면 카디널리티는 10이다. 인덱스 키값 가운데.. 2024. 2. 21.
[MySQL] 쿼리 최적화 1. 실행 계획 쿼리최적화 목록 보기 1/1 들어가며 우아한 테크코스 백엔드 3기 수업 중 조회 성능 개선하기를 정리하고, 개인적으로 보강한 내용입니다~! shout out to CU 코치 쿼리 최적화의 필요성 웹 어플리케이션에서 DB는 뗄레야 뗄 수 없는 사이! DB에 조회하고 저장하는 작업이 주를 이루게 됩니다. 서버 처리시간의 대부분이 SQL을 처리하는 시간에 들어가곤 하는데, 서버의 응답이 느려질수록 유저의 만족도는 떨어져가겠죠.. 웹사이트 전문가 제이콥 닐슨은 응답 속도에 따른 유저 경험을 다음과 같이 평가합니다. 링크 0.1초 : 즉각적인 응답이라는 느낌을 준다 1초 : 지연을 감지하고 컴퓨터가 결과를 처리하고 있다는 느낌을 받지만, 아직 스스로 제어할 수 있다고 느낀다. 10초 : 사용자가 집중력을 유지할 .. 2024. 2. 20.
B-Tree가 왜 DB 인덱스(index)로 사용되는지 B-Tree 목록 보기 3/3 들어가며 해당 강의를 보고 정리한 내용입니다. B-Tree vs self-balancing BST 둘다 시간 복잡도가 동일한데 B-Tree가 왜 DB 인덱스(index)로 사용될까? 이유를 살펴보기 위해 일단 컴퓨터 시스템에 대해 간략하게 살펴보자 컴퓨터 시스템 Secondary storage 특징 데이터를 처리하는 속도가 가장 느립니다. 데이터를 저장하는 용량이 가장 큽니다. 데이터를 블록(block) 단위로 읽고 씁니다. 블록은 파일 시스템이 데이터를 읽고 쓰는 논리적인 단위로, 주로 2의 승수로 표현됩니다. 대표적인 블록 크기에는 4KB, 8KB, 16KB 등이 있습니다. 불필요한 데이터까지 읽어올 가능성이 있습니다. DB관점에서 지금까지 내용 정리 DB는 Second.. 2024. 2. 20.
[MYSQL] SQL 쿼리문 최적화 - 효율적인 쿼리를 위한 팁 SQL 쿼리문 최적화 목표 1. 성능 향상(개선) 2. 응답 시간 단축 3. 기술 자원 보존 4. 비용 절약 SQL 효율적인 쿼리를 위한 팁 1. Select only the columns you need. (필요한 컬럼만 선택하라) SELECT * FROM customers; 데이터베이스에서 쿼리를 실행할 때 필요한 컬럼만 선택한다. SELECT name,age,city FROM customers; 장점 1. 성능 향상 : 필요한 컬럼만 선택하면 데이터베이스 서버가 불필요한 작업을 수행하지 않아도된다. 컬럼의 개수가 적을수록 데이터 검색 및 처리 시간이 단축되고, 네트워크 부하가 감소한다. 쿼리의 실행 속도가 향상되고, 전체적인 시스템 성능이 향상될 수 있다. 2. 리소스 절약 : 필요한 컬럼만 선택.. 2024. 2. 20.
MySQL 쿼리 분석 part 1 - 성능 스키마의 9가지 필수 쿼리 메트릭 쿼리 분석(query analysis)의 목표는 느린 응답 시간의 해결이 아닌 ‘쿼리 실행’을 이해하려는 것이다. 느린 응답 시간을 해결하는 행위는 쿼리 분석 후 쿼리 최적화 과정에서 이루어진다. 성능 스키마(performance schema)는 다음의 9가지 필수 쿼리 메트릭을 제공한다. 1. 쿼리 시간 쿼리 시간(query time)은 가장 중요한 메트릭이다. 쿼리 시간에는 또 다른 메트릭인 잠금 시간(lock time)이 포함된다. MySQL에서는 성능 스키마로 수집되는 이벤트를 “시간이 소요되는 측정 정보를 수집할 수 있도록 구비된, 서버가 수행하는 모든 작업”으로 정의하며, 다음의 계층 구조로 구성된다. hierarchy of event ‘트랜잭션’은 모든 쿼리가 내부에서 수행되는 최상위 이벤트.. 2024. 2. 20.