본문 바로가기

DataBase

(7)
[DataBase] Query 비교 및 개념 SubQuery 와 Join SubQuery 가 일으킬 수 있는 문제들 SubQuery는 테이블과 같은 형태의 결과값을 만들어내지만, 실제 데이터는 저장하지않기때문에 성능저하를 야기할 수 있습니다. → SubQuery 를 접근할 때마다 Select 가 실행 SubQuery로 만들어지는 데이터는 테이블과 다르게 데이터를 설명하는 메타 정보를 가지고 있지않습니다. → 옵티마이저가 최적화를 하지 못함 SubQuery 를 꼭 사용해야한다면? MySQL 5.6 이상의 버전은 서브 쿼리가 최적화를 진행하는 조건이 생겼습니다. 그럼에도 위와같은 문제 때문에 비교적 Join 을 사용하는것이 더 좋긴합니다. 하지만 SubQuery 를 꼭 사용해야하는 상황이 있을 수 있기에 최적화가 되는 조건에 대해 알아보겠습니다. IN..
[DataBase] DBCP DBCP 커넥션 풀이란 일정량의 Connection 객체들을 미리 만들어서 pool 에 저장했다가, 클라이언트 요청이 오면 Connection 을 빌려주고, 해당 객체의 임무가 완료되면 다시 반납해서 pool에 저장하는 기법입니다. Hikari CP 동작원리 Connection 요청 이전에 사용했던 Connection 정보가 존재하는지 확인합니다. 이전 사용했던 Connection 목록 중 사용 가능한 Connection 이 있는지 확인 전체 Connection 목록 중 사용 가능한 존재 여부 확인 Connection 반환 만일 사용가능한 Connection 이 없다면 HandOffQueue 를 Polling 하면서 Thread 가 반납할 때까지 기다립니다. (지정한 TimeOut 시간까지 대기하다가 시..
[DataBase] DBMS 기본 용어 스토리지 엔진 스토리지 엔진은 예를들어 InnoDB, MyISAM, Memory 등이 존재합니다. 사용자가 요청한 SQL 문을 토대로 DB 에 저장된 디스크나 메모리에서 필요한 데이터를 가져옵니다. 이후 해당 데이터를 MySQL 엔진으로 보내줍니다. 일반적으로 온라인상의 트랜잭션 발생으로 데이터를 처리하는 OnlineTractionProcessing 환경이 대다수이므로 InnoDB 엔진을 사용합니다. MySQL 엔진 사용자가 요청한 SQL 문을 넘겨받은 뒤 SQL 검사를 하고 SQL 문을 최소단위로 분리하여 원하는 데이터를 빠르게 찾는 경로를 모색합니다. 이후 스토리지 엔진으로부터 전달받은 데이터 대상으로 불필요한 데이터를 제거하거나 가공하는 역할도 합니다. 파서 사용자가 요청한 SQL 문을 쪼개 최소단..
[DataBase] MySQL vs Oracle 스프링으로 서버를 구축하며 모든 프로젝트에는 DB를 사용했습니다. 아무런 고민없이 H2, Mysql 같은 DB들을 사용하였는데 을 공부하며 Oracle에 대한 내용을 접했을 때, 왜 Oracle을 이제까지 사용해보지 않았는지 의문이 들었습니다. 따라서 을 제대로 공부하기 전, Mysql과 많이 비교되는 Oracle에 대해서 비교해보는 포스팅을 작성하겠습니다. 비용 MySQL MySQL은 기본적으로 오픈소스 라이선스이기 때문에 무료입니다. 따라서 보통 중소규모의 프로젝트에 사용됩니다. MySQL은 차지하는 용량도 정말 적기때문에 비용면에서 크게 이득입니다. 1MB 메모리 환경에서도 데이터베이스를 운영할 수 있을만큼 오버해드가 작습니다. Oracle "페이스북이 가진 데이터를 모두 오라클 RDBMS에 저장하..
[DataBase] 사용자 사용자 식별 MySQL 에서 사용자의 계정은 사용자가 설정한 아이디 + 사용자의 접속지점(호스트명이나 ip 주소)입니다. 따라서 'user'@'127.0.0.1' 의 계정은 로컬에서 user라는 아이디로 접속할 때만 사용할 수 있습니다. 만일 접속지점과 관계없이 계정을 생성하고 싶다면 'user'@'%' 으로 사용할 수 있습니다. 만일 동일한 아이디가 있을 때 MySQL 서버가 어떤 계정을 선택할까요? 'user'@'192.168.0.10' (password : 123) 'user'@'%' (password : abc) 이런 경우에는 범위가 가장 작은것을 선택하게 됩니다. 즉, 1번을 선택할 것이고 abc 로 로그인을 시도하게된다면 로그인 실패로 이어질 것입니다. 시스템 계정과 일반 계정 시스템 계정은 ..
[DataBase] MySQL 시스템 변수 MySQL 시스템 변수 MySQL 서버는 설정파일(my.ini or my.cnf)의 내용을 읽어 메모리나 작동방식을 초기화하고, 접속된 사용자를 제어하기 위해서 이런 값들을 별도로 저장해둡니다. 이러한 값들을 시스템 변수라고 부릅니다. 해당 값들은 다음과 같이 SHOW VARIABLES 또는 SHOW GLOBAL VARIABLES 라는 명령어로 확인할 수 있습니다. 글로벌 변수와 세션변수 일반적으로 시스템 변수가 가지는 속성 중 대표적으로 Var Scope 라는 옵션이 존재합니다. 이는 시스템 변수의 적용범위를 나타내는 것인데, 서버 전체에 영향을 미치는지 아니면 세션(MySQL 서버와 클라이언트 간의 커넥션)에만 적용되는것인지 구분합니다. 둘다 적용이 된다면 Both 라고 구분이 됩니다. 글로벌 변수는..
[DataBase] Select 쿼리 실행순서 Select 쿼리 실행순서 Select 쿼리를 실행하게되면 따라오는 쿼리들의 실행순서가 존재합니다. 사실 당연히 DB 내에서 실행순서가 존재는 하겠지만, 이것이 개발자에게 중요한 개념이라는 것을 인지하지 못하였습니다. 따라서 이번글에서는 실행과정과 왜 중요한지에 대해 글을 작성하겠습니다. Select 쿼리 실행순서 과정 종류 : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 1. FROM 절 제일 처음 FROM 절에 명시되어있는 테이블의 데이터를 가져옵니다. 2. WHERE 절 FROM 절에서 읽어온 테이블의 데이터에서 조건에 맞는 결과만 필터링합니다. 3. GROUP BY 절 GROUP BY로 명시된 컬럼(열)을 기준으로 공통된 값들끼리 그룹화 시킵니다. 4. H..