본문 바로가기

DBA55

[MySQL] 인덱스(INDEX) 정리(효과적인 INDEX 설계) 개요 MySQL 스키마 설계는 자주 해보았지만 효율적인 데이터타입, 인덱스 설계에 대한 부분은 이해도가 낮은 것 같아 조사 후 남기는 포스팅이다. 인덱스의 개념 인덱스는 테이블의 동작속도(조회)를 높여주는 자료구조이다. 인덱스로 데이터의 위치를 빠르게 찾아주는 역할이고 쉽게 예를 들어보면 책 뒷편에 '색인'이 인덱스의 역할과 동일하다고 볼 수 있다. (예를들어 '홍길동'이라는 단어를 찾고싶으면 색인페이지에서 '홍'으로 시작하거나 'ㅎ'으로 시작하는 색인을 찾아보면 빠르게 찾을 수 있다.) 인덱스는 MYI(MySQL Index)파일에 저장되며, 인덱스가 설정되지 않았다면 Table Full Scan이 일어나 성능이 저하되거나 치명적인 장애가 발생한다. 조회속도는 빨라지지만 UPDATE, INSERT, DE.. 2024. 2. 25.
MySQL튜닝5) 튜닝 기본 예제 1. 실습 데이터 세팅 - 실습 데이터 URL : https://github.com/7ieon/SQLtune - 실습 데이터 정보 2. SQL문 단순 수정으로 착한 쿼리 만들기 1) 사원번호가 1100으로 시작하면서 사원번호가 5자리인 사원 정보 출력 # AS_IS -- 0.329 sec / 0.000 sec SELECT * FROM 사원 WHERE SUBSTRING(사원번호,1,4) = 1100 AND LENGTH(사원번호) = 5 # Tuning - 기본키인 사원번호 접근 시 WHERE 절에서 가공하여 접근 => Table Full Scan이 발생 (type = 'ALL') # TO_BE -- 0.000 sec / 0.000 sec SELECT * FROM 사원 WHERE 사원번호 BETWEEN 11.. 2024. 2. 25.
데이터베이스 설계와 구축(개정판) (2009년) 데이터베이스 설계 단계에서 튜닝하기 데이터 정합성을 유지할 수 있는 대책을 마련하고, 성능을 위해 필요하다면 테이블, 컬럼, 관계에 대해 반정규화를 적용한다. 대용량 테이블의 경우 필요한 데이터에 대해서는 파티셔닝을 이용하여 테이블 분할을 검토한다. 이력을 관리해야 하는 테이블에 대해서는 필요하다면 시작과 종료나 현재 상태 등을 명확하게 명시하여 SQL 문장의 실행 성능을 보장한다. 테이블 접근 유형에 따라 전체 스캔 방식이나 B 트리 인덱스, 비트맵 인덱스, 클러스터링과 해싱 적용 등을 고려한다. 테이블이 조회를 주로 하는지 입력,수정,삭제 작업이 주로 발생하는지를 고려하여 적당한 인덱스 개수를 지정해야 한다. 극단적으로 조회만 발생하는 경우에는 테이블에 인덱스가 많이 있어도 무방하지만, 입력, 수정,.. 2024. 2. 24.
인덱스 튜닝 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.