본문 바로가기

DB/MySql4

[MySql] 쿼리 캐시 쿼리 캐시 쿼리 캐시는 MySql 에만 존재하는 기능 중 하나로써, 적절한 설정을 하면 상당한 성능 향상 효과를 얻을 수 있다. SQL 문장을 캐시하는 것이 아니라 쿼리의 결과를 메모리에 캐시해 두는 기능이다. 구조는 간단히 맵(Map)과 같이 키와 값의 구조로 구현되어 있다. 여기서 키는 쿼리 문장, 값은 쿼리의 실행 결과를 나타낸다. 데이터베이스에서 쿼리를 처리할 때는 상당히 많은 부분의 처리 절차가 있다. 이를 전부 무시하고 동일한 쿼리 문장이 요청 됐다고해서 그냥 캐시된 결과를 보내서는 안된다. 처리 절차 요청된 쿼리 문장이 쿼리 캐시에 존재하는가? 쿼리 문장 비교대상에는 공백, 탭과 같은 문자도 모두 포함되며, 대소문자까지 완전히 동일해야 같은 쿼리로 인식한다. 동일한 쿼리라도 대소문자, 공백,.. 2019. 6. 27.
[MySql] 쿼리 실행 구조 쿼리 실행 구조 쿼리 실행 구조는 기능별로 다음과 같이 나눠질 수 있다. 1. 파서(Parser) 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰(MySql이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만들어 내는 작업을 의미한다. 이 때, 만들어진 트리 형태를 파스트리(parse tree) 라고 한다. 쿼리 문장의 문법 오류는 이 과정에서 발견되어 사용자에게 오류 메시지를 전달한다. 2. 전처리기(PreProcessor) 파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인한다. 각 토큰을 테이블 이름이나 컬럼 이름 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근 권한 등을 확인하는 과정을 이 단계에서 수행한다... 2019. 6. 22.
[MySql] 실행계획 MySql 실행 계획 DBMS의 쿼리가 실행되면 결과를 출력하는 방법은 아주 많이 있지만, 그 중에서 최적화된 방법을 결정해야 한다. DBMS에서는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하고, 그 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. 이런 역할을 하는 것이 DBMS의 옵티마이저다. 모든 DBMS의 옵티마이저는 가장 복잡하고, 이해하기 어렵다. 하지만 실행 계획을 이해할 수 있어야 불합리한 부분을 찾아내, 더욱 최적화된 방법으로 계획을 수립하도록 유도할 수 있다. 쿼리 실행 절차 크게 3가지로 나눌 수 있다. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySql 서버가 이해할 수 있는 수준으로 분리 SQL의 파싱 정.. 2019. 5. 4.
[MySql] Procedure로 loop insert DB에서 대량의 대상들에 대해 테스트를 해보기 위해 임시의 데이터를 넣어야한다. 그런데 어떻게 그 많은 데이터들을 다 넣을까? 프로시저를 사용해서 데이터를 insert 해준다. delimiter $$ DROP PROCEDURE IF EXISTS dataBulkInsert$$ create procedure dataBulkInsert() //함수 생성 begin //시작 declare i int default 1; //i값 생성 while(i 100; end loop; end; call dataInsert(); 2019. 3. 21.