DB에서 B-Tree, B+ Tree
·
Interview/DB
DB에서 B-Tree, B+ TreeB-Tree는 컴퓨터 과학에서 데이터베이스 및 파일 시스템과 같은 대용량 데이터를 효율적으로 관리하기 위한 완전한 균형을 맞춘 트리 self-balancing search tree입니다. B-Tree는 트리의 높이를 작게 유지함으로써 검색, 삽입, 삭제 연산을 빠르게 수행할 수 있도록 설계되었습니다. 이를 통해 데이터를 디스크에 저장할 때 발생하는 입출력(I/O) 비용을 줄이는 데 효과적입니다.B-TreeB-Tree가 데이터베이스에 적합한 이유는 다음과 같습니다:균형 트리 구조: B-Tree는 모든 리프 노드가 같은 깊이에 위치하는 균형 트리 구조를 유지합니다. 이는 데이터가 삽입, 삭제되더라도 항상 일정한 높이를 유지하게 되어 검색, 삽입, 삭제 등의 연산이 일정한 ..
Database Explain을 통한 최적화 분석
·
Interview/DB
Database Explain을 통한 최적화MySQL 쿼리 최적화는 데이터베이스 성능을 향상시키기 위해 매우 중요한 작업입니다. 쿼리 최적화의 주요 기법 중 일부는 다음과 같습니다:인덱스 사용 최적화: 자주 사용하는 열에 인덱스를 추가하여 검색 속도를 높이는 방법.조인(JOIN) 최적화: 적절한 조인 방식을 선택하거나, 불필요한 조인을 피함으로써 성능을 개선.쿼리 재작성: 복잡한 서브쿼리를 단순화하거나, 더 효율적인 구조로 변경.쿼리 캐싱: 동일한 쿼리의 반복 실행을 캐싱하여 성능 향상.실행 계획(Execution Plan) 분석: EXPLAIN 명령어를 통해 쿼리 실행 계획을 분석하고, 비효율적인 부분을 찾아 최적화.EXPLAIN 사용법EXPLAIN 명령어는 MySQL에서 쿼리의 실행 계획을 분석하는 ..
int128_t 64 bit에서 표현을 못하는 정수형 데이터 처리 방식
·
Interview/Algorithm
int128_t 64 bit에서 표현을 못하는 정수형 데이터 처리 방식C언어에서 int64_t로 표현할 수 없는 엄청 큰 정수를 다루기 위해서는 아래와 같은 방법을 사용할 수 있습니다.다중 정밀도 정수 라이브러리 사용 (Multiple Precision Arithmetic Library)C언어에서 기본적으로 제공하는 정수 타입으로는 큰 정수를 표현하기 어렵기 때문에, 외부 라이브러리인 GMP (GNU Multiple Precision Arithmetic Library)와 같은 다중 정밀도 수학 라이브러리를 사용하는 것이 좋습니다.GMP는 매우 큰 정수, 유리수, 부동 소수점 수를 효율적으로 다룰 수 있는 기능을 제공합니다.이 라이브러리를 사용하면 임의의 정밀도로 큰 정수를 계산하고 저장할 수 있습니다.m..
VARCHAR vs TEXT
·
Interview/DB
VARCHAR vs TEXTVARCHAR와 TEXT는 MySQL에서 문자열 데이터를 저장할 때 사용하는 주요 데이터 유형이지만, 그들의 용도와 내부적인 동작 방식에는 중요한 차이점이 있습니다. 특히 TEXT는 LOB(대형 객체, Large Object) 유형의 일부로서, 다르게 처리되며 특정 상황에서 비효율적인 동작을 할 수 있습니다.1. VARCHAR와 TEXT의 개요VARCHAR:길이가 가변적인 문자열을 저장하는 데 사용됩니다.최대 길이는 MySQL 5.7에서는 65,535 바이트까지 저장할 수 있으며, 이 최대 길이는 테이블의 행 크기 및 문자 세트에 따라 제한됩니다.데이터는 인라인(inline)으로 테이블의 데이터 페이지에 저장되므로, 빠르게 접근할 수 있습니다.VARCHAR는 문자열의 실제 길이..
MySQL DISTINCT
·
Interview/DB
MySQL DISTINCTDISTINCT를 자주 사용하는 것은 성능 측면에서 문제가 될 수 있습니다. 그 이유는 DISTINCT가 컴퓨팅 작업을 많이 필요로 하기 때문입니다. 좀 더 구체적으로 이유를 살펴보면 다음과 같습니다.1. 추가적인 정렬과 필터링 작업DISTINCT는 결과 집합에서 중복된 행을 제거하기 위해 사용되며, 이는 내부적으로 많은 연산을 수반합니다. 일반적으로 DISTINCT를 사용하면 데이터베이스 엔진은 결과를 정렬한 후 중복을 제거하는 과정을 거치게 됩니다.이 과정에서 데이터의 양이 많아질수록 정렬과 중복 제거 작업의 복잡성이 증가합니다. 특히, 수백만 건 이상의 데이터에서 DISTINCT를 사용할 경우 CPU와 메모리 리소스를 많이 소모하게 되어 성능 저하로 이어질 수 있습니다.2...
MySQL Group by와 Having
·
Interview/DB
MySQL Group by와 HavingGROUP BY와 HAVING은 MySQL에서 집계 쿼리를 작성할 때 주로 사용되는 절입니다. 이를 통해 데이터 그룹화 및 그룹에 대한 조건을 적용할 수 있습니다.GROUP BY: 동일한 값을 갖는 행들을 그룹으로 묶어줍니다. 예를 들어, 특정 컬럼의 값을 기준으로 데이터를 묶어 해당 그룹에 대해 합계, 평균 등의 집계 함수를 사용할 수 있습니다.HAVING: 그룹화된 데이터에 조건을 적용할 때 사용합니다. WHERE 절과 비슷하지만, HAVING은 집계 함수 (SUM, AVG, COUNT 등)를 사용할 수 있다는 점이 특징입니다. WHERE는 그룹화되기 전에 행 필터링에 사용되고, HAVING은 그룹화된 후 필터링에 사용됩니다.다음 예제 쿼리를 통해 이를 설명해 ..
Database Select Query
·
Interview/DB
Select Query💡 SELECT 쿼리의 수행 순서테이블 (FROM , ON , JOIN) > 조건, 집계 (WHERE , GROUP BY, HAVING > 컬럼 선택 SELECT > 중복 DIS TINCT > 정렬 ORDER BY > 개수 제한 LIMITFROM각 테이블을 확인한다.ONJOIN 조건을 확인한다.JOINJOIN이 실행되어 데이터가 SET으로 모아지게 된다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와준다.WHEREWHERE의 조건이 개별 행에 적용된다.GROUP BYWHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다. 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 한다.HAVINGGROUP BY절이 쿼리에 있을 ..
Database Commit vs Rollback
·
Interview/DB
Database Commit vs RollbackDB에서 커밋(commit)과 롤백(rollback)은 트랜잭션(transaction) 제어의 중요한 개념입니다. 이 두 개념을 잘 이해하면 데이터의 일관성을 유지하고 오류 발생 시 문제를 최소화할 수 있습니다.1. 트랜잭션(Transaction)트랜잭션은 데이터베이스에서 수행되는 하나의 논리적 작업 단위입니다. 여러 쿼리(INSERT, UPDATE, DELETE 등)를 하나의 묶음으로 실행하고, 모든 쿼리가 성공해야만 최종적으로 데이터베이스에 반영됩니다. 그렇지 않으면 전체 트랜잭션이 취소되어 원래 상태로 되돌아가야 합니다. 트랜잭션의 특징은 ACID라고 불리며, 아래와 같은 속성을 갖습니다.원자성(Atomicity): 트랜잭션 내의 모든 작업이 모두 성..
김 정출
Jeongchul Kim