MySQL
프로그래밍/Database
2020. 8. 23.
[MySQL] Explain_Query 동작 방식 및 성능 파악하기
DB Schema 설계는 Business Logic에 대한 이해로부터 비롯된다. 이 때, Schema의 설계에는 2가지가 포함된다고 생각한다. Business Logic에 부합하는 Entity들을 구상하여 Entity들 간의 관계(Relation)를 확실하게 규정하는 것과 실제 사용성의 측면에서 지나치게 복잡한 구조는 지양하여, 효과적인 쿼리 수행 성능을 위한 구조를 마련하는 것이 포함된다. 이 중, Entity 들 간의 관계를 규정하는 부분에 대해서는 아래 링크의 포스팅을 통해 언급한 적이 있다. 2020/04/07 - [프로그래밍/Database] - [DB] 정규화(Normalization)와 역정규화(DeNormalization) [DB] 정규화(Normalization)와 역정규화(DeNorma..
프로그래밍/Database
2020. 8. 17.
[MySQL] Order By한 뒤, Group By하는 방법
Data가 적재된 방식에 따라 Group By의 결과가 달라지게 될 것이다. Group By를 통해 얻고자 하는 값이 Sum이거나 Count와 같이 가공이 이뤄지는 값이라면 아래의 쿼리 들은 큰 의미가 없을 것이다. 하지만 만약에 데이터가 기록된 시간 또는 업데이트 된 시간에 따라 정렬한 뒤 Group By를 하고자 하는 경우가 있을 것이다. 간단하게 생각하여 쿼리를 작성한다면 아래와 같을 것이다. SELECT * FROM order_book ORDER BY created_at DESC GROUP BY product; 하지만 위의 쿼리는 에러가 발생한다. Depth가 동일한 쿼리에서 Order By와 Group By를 동시에 사용할 수 없다는 의미의 쿼리 에러가 발생하는 것이다. 그렇다면, Sub Que..
프로그래밍/Database
2020. 8. 5.
[MySQL] Roll-Up Query
Roll Up 쿼리는 Group By와 함께 사용되는 조건 구문이다. Group By 쿼리에 의해서 grouping된 결과에 대해서 보다 상세한 정보를 반환하는 기능을 수행한다. ROLLUP 쿼리를 사용한다면 그룹화된 row들에 대한 중간 합(결과)에 대한 새로운 row가 추가되어 쿼리의 결과를 얻을 수 있게 된다. 아래의 정보들이 저장되어 있다고 할 경우, ROLLUP 쿼리를 쓴 결과는 아래와 같다. warehouse product model quantity San Francisco Apple iPhone XS 50 San Francisco Apple iPad Pro 10 San Francisco Apple Apple Watch 200 San Francisco Samsung Z Flip 200 San ..
프로그래밍/Database
2020. 5. 15.
[MySQL] 동시성 문제의 해결을 위한 for update
2020/05/09 - [프로그래밍/Database] - [MySQL] Lock wait timeout exceeded [MySQL] Lock wait timeout exceeded 기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알�� jaenjoy.tistory.com Lock wait timeout exceeded 문제를 직면하고 이를 해결하는 과정에서 새롭게 학습하고, 기존의 지식을 재정리하게 된 또 하나의 주제로 For Update를 다뤄보고자 한다. Web Service의 특징과 필수 조건 For Update에 대한 글 이전에 ..
프로그래밍/Database
2020. 5. 12.
[MySQL] MyISAM과 InnoDB_MySQL storage engine
2020/05/09 - [프로그래밍/Database] - [MySQL] Lock wait timeout exceeded [MySQL] Lock wait timeout exceeded 기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알�� jaenjoy.tistory.com 지난 Lock wait timeout exceeded 포스팅에서 언급한 적이 있던 innodb에 대해 설명해보고자 한다. Storage Engine 스토리지 엔진(Storage Engine)이란 물리적 저장장치에서 데이터를 읽어오는 역할을 담당하는 부분이다. "데이터를 ..
프로그래밍/Database
2020. 3. 29.
[DB] 트랜잭션(Transaction)이란?
Transaction이란? 데이터베이스의 상태를 변화시키기 위해서 수행해야 할 연산들의 집합으로 하나의 작업 처리를 위한 논리적 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것을 간단하게 표현하면, SELECT, INSERT, DELETE, UPDATE의 쿼리를 사용하여 DB에 접근하는 것을 의미한다. 일반적인 경우, 작업 처리의 단위는 한 건의 쿼리(즉 연산)가 아닌 여러 개의 연산이 복합적으로 구성되는 것이 일반적이다. 현재 작성하고 있는 글을 등록하는 작업을 생각해보자. 글의 내용을 작성한 뒤, 등록 버튼을 눌렀을 때 새로운 글이 등록된 최신 글 목록이 보여지는 작업 처리의 단위는 등록할 때의 INSERT와 최신 리스트를 보여주는 SELECT가 하나의 단위에서 구성되는 것으로 이러한 작업의 단..
프로그래밍/Database
2020. 3. 25.
[MySQL] Inner Join과 Left Join의 차이
신입 개발자 면접에서 단골 질문이었다. " Inner Join과 Outer Join의 차이점을 아시나요? " 아마 join과 관련된 차이점을 검색할 때 가장 많이 나오는 이미지가 아래의 이미지일 것이다. 가장 간단하게 표현하면 Inner Join : Table A와 Table B의 교집합을 조회 Outer Join : Table A와 Table B의 합집합을 조회 사물의 이름을 저장하고 있는 table_A와 무게를 저장하고 있는 table_B, 그리고 해당 사물과 무게의 관계를 표현하는 rel_table_a_b 3개가 있는 상황이라고 해보자. Left Join 즉, Left Outer Join을 한 결과는 아래와 같다. select * from table_a as a left join rel_table_..