이번에는 간접 쿼리 최적화에 대해 알아볼 예정이다.직접 쿼리 최적화가 많은 문제를 해결하지만, 전부를 해결해 주지는 않는다. 적절하게 인덱스가 되어 있는 쿼리지만 여전히 느린 상황을 접할 수도 있다. 일반적으로는 직접 쿼리 최적화로 충분하나 적은 데이터는 더 나은 성능을 가져오기에 데이터 접근과 스토리지를 줄이는 것이 성능 향상을 위한 기술이라 얘기할 수 있다. 세 가지 비밀MySQL 직접 쿼리 최적화에서 성능을 개선했다고 해도 의도치 않은 결과를 가질 수 있다. 이에 대해 알아보자. 인덱스가 도움이 되지 않을 수 있다. 인덱스 스캔인덱스 스캔은 테이블 행 수가 증가할 수록 인덱스 스캔을 사용하는 쿼리에 대한 응답 시간도 늘어나므로 반드시 지연 시간이 발생한다.이는 테이블 크기와 인덱스 크기가 같이 ..
MySQL은 하드웨어와 최적화, 인덱스를 활용하여 필요한 데이터에 접근할 때 성능을 발휘한다.최적화는 MySQL 측면에서 하드웨어를 효율적으로 활용하게 해주는 다양한 기술과 알고리즘, 데이터 구조를 의미한다.즉, 최적화는 하드웨어 성능에 초점을 맞추는 것이며 하드웨어보다 최적화가 MySQL 성능에 더 많은 영향력을 미치게된다.인덱스가 없는 MySQL 성능은 작은 규모의 데이터만 들어올릴 수 있는 성능으로 제한되지만,균형 잡힌 지렛대에 인덱스를 추가하면 MySQL은 대량의 데이터도 월등한 성능으로 처리한다. 성능 향상과 관련 없는 딴 짓MySQL성능을 향상 시키기 위한 방법을 찾을 때 두 가지 방법이 등장하는데 고사양의 하드웨어를 구매하는 것과 MySQL 튜닝이다.더 좋고 빠른 하드웨어MySQL 성능을 ..
“성능은 곧 쿼리 응답 시간이다.”해당 포스트의 목적은 MySQL 성능을 현저하게 개선하는 것이며, 다양한 측면에서 그 방안을 탐구하고자 한다. MySQL을 관리하는 입장이 아니라 사용하는 입장으로, 최소한의 노력으로 최대한의 성과가 필요한 개발자로서 접근하고자 한다는 것이다. 쿼리 응답 시간(Query Response Time)이란?쿼리 응답 시간은 MySQL이 쿼리를 실행하는데 소요되는 시간이다.소요 시간(timing)은 MySQL이 쿼리를 받을 때 시작되고 결과 세트를 클라이언트에게 전송한 시점까지의 경과 시간을 의미한다.쿼리 응답 시간은 여러 단계와 대기로 구성되지만, 완벽한 상세 명세는 가능하지도 않고 필요하지도 않다.핵심지표(North Star)로서 쿼리 응답 시간솔직히 DB가 빠를 때는 아무..
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 인덱스를 어떻게 사용한다는거지? 테이블에 인덱스 컬럼을 추가하는 건가? 사용해서 어떻게 빨리 찾는다는거지? 각 테이블로 그냥 탐색하는거랑 어떻게 다른건가? 인덱스를 활용하면, 데이터를 조회하는 성능이 함께 향상된다. 만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다. 인덱스의 관리 DBMS..
데이터베이스에서 사용하는 키에 대해 알아보자 릴레이션은 테이블, 튜플은 행 혹은 하나의 데이터라고 생각하면 된다. 속성은 테이블의 컬럼(열)이다. 키를 알아보기 앞서 최소성과 유일성의 개념을 알아보자 최소성 : 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질 유일성 : 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질 최소성은 쉽게 설명하면 키를 구성하는 속성들이 진짜 각 튜플을 구분하는데 꼭 필요한 속성들로만 구성되어 있냐를 의미한다. (후에 배우는 슈퍼키는 속성 여러개를 묶어서 키로 사용한다) 굳이 없어도 될 속성들을 넣지 말자는 말이다. 1. 슈퍼키 (Super Key) 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플 중 ..
데이터베이스 컨넥션 풀이란? 데이터베이스 컨넥션 풀에 대해 먼저 간략히 말하자면 데이터베이스에 접근할 수 있는 컨넥션을 보관하는 풀장의 개념입니다. 만약 웹서버에서 클라이언트의 요청에 의해 데이터를 제공하려고 데이터베이스에 접근하게 될 때, 즉 쿼리문을 DB로 날리게 되면 바로 접근하는 것이 아니라 컨넥션이라는 객채를 통해 접근하게됩니다. 그럼 왜 이 컨넥션을 풀장 개념으로 보관해야하는가에 대해 의문이 생길 수 있는데, 이는 DB에 접근하기 위해 컨넥션 객체를 만들고 원하는데이터를 찾아오는 과정에서 가장 시간을 많이 소모하는, 즉 비용이 많이드는 부분이 바로 객체를 생성하는 시간이기 때문입니다. 그렇기에 DB에 접근할 때마다 컨넥션 객체를 생성하는 시간을 줄이기 위해 DBCP개념을 두어 비용과 대기 시간..
먼저, 파일시스템에 대해 설명하겠습니다. 파일 시스템은 데이터베이스가 등장하기이전에 데이터를 관리하던 도구입니다. 그러나 현재는 데이터베이스를 더 많이 사용하는데요. 그러한 이유에는 여러 문제가 있었기 때문입니다. 파일 시스템의 경우 데이터를 받는대로 저장하였기에 중복된 데이터가 너무 많았고, 이 때문에 데이터의 추가, 수정, 삭제가 번거로웠습니다. 그리고 만약 데이터가 손실, 파일시스템에 장애가 일어나더라도 회복할 수 있는 기능이 없었습니다. 그리고 동일한 파일을 동시에 다른 프로그램이 접근할 수 없어 불편하고 결정적으로는 응용프로그램에 대한 의존도가 높아 구조를 변경하게 된다면 새로운 프로그램이 필요했습니다. 이러한 문제점을 해결할 수 있는 것이 데이터베이스였습니다. 데이터베이스는 독립성이 보장됩니다..
SQL의 데이터 조작 기능 데이터 검색 : SELECT 기본 검색 SELECT 키워드와 함께 검색하고 싶은 속성의 이름 나열 FROM 키워드와 함께 검색하고 싶은 속성이 있는 테이블의 이름 나열 검색 결과는 테이블 형태로 반환됨 ALL : 결과 테이블이 투플의 중복을 허용하도록 지정, 생략 가능 DISTINCT : 결과 테이블이 중복을 허용하도록 지정 IF 고객 테이블에 존재하는 모든 속성을 검색 SELECT 고객아이디, 고객이름, 나이, 등급, 직업, 적립급 FROM 고객; ---------------------- SELECT * FROM 고객; AS 키워드를 이용해 결과 테이블에서 속성의 이름을 바꾸어 출력 가능 SELECT 고객이름 AS 고객; FROM 고객; 2. 산술식을 이용한 검색 SELECT..