Clustered Index vs Non-Clustered Index — 구조와 차이 정리
데이터베이스 인덱스는 크게 Clustered Index와 Non-Clustered Index로 나뉜다. 두 인덱스는 “데이터를 어떻게 저장하고 접근하는가”에서 구조적인 차이가 있...
Hee Blog
MySQL, MariaDB 등 RDB 설계, 쿼리 최적화, 마이그레이션 등 DB 관련 정리와 메모를 담은 카테고리입니다.
데이터베이스 인덱스는 크게 Clustered Index와 Non-Clustered Index로 나뉜다. 두 인덱스는 “데이터를 어떻게 저장하고 접근하는가”에서 구조적인 차이가 있...
MySQL에서 사용하는 대부분의 인덱스는 B-Tree 구조로 이루어져 있다. B-Tree는 대용량 데이터에서 빠르게 값을 찾기 위해 설계된 트리 형태의 자료 구조다. 테이블...
MySQL에서 가장 많이 사용하는 페이징 방식은 LIMIT OFFSET 구조다. 하지만 데이터가 많아질수록 이 방식은 점점 느려지는 문제가 있다. 특히 페이지 번호가 커질수...
데이터가 수천만 건을 넘어가면 단일 테이블 구조는 점점 한계에 부딪힌다. 인덱스 크기가 커지고, 백업·복구 시간이 길어지며, 특정 쿼리의 응답 속도가 급격히 저하된다. 이 ...
트랜잭션(Transaction)은 하나의 논리적 작업 단위를 보장하기 위한 DB 기능이다. 여러 개의 SQL이 하나의 작업처럼 처리되며, 전부 성공하거나 전부 실패해야 한다. ...
MySQL에서 “키(Key)”는 단순히 검색 속도를 높이기 위한 인덱스 개념을 넘는다. 데이터의 무결성을 보장하고, 테이블 간 관계를 정의하며, 중복을 방지하는 핵심 제약 조건이...
ERD(Entity-Relationship Diagram)는 데이터베이스에 들어갈 엔터티(테이블 후보)와 그 관계를 시각적으로 표현한 다이어그램이다. 좋은 ERD와 데이터베이스 설...
데이터베이스 제품의 기능을 나열하는 것만으로는 저장소를 선택하기 어렵다. PHP 웹 서비스에서는 데이터의 정본이 무엇인지, 어떤 일관성이 필요한지, 실패했을 때 어떻게 복구할지를 ...
MySQL에서 테이블끼리 연결할 때 쓰는 JOIN 종류, 언제 어떤 것을 쓰면 좋은지, JOIN과 UNION의 차이를 정리한 내용이다. 쿼리 작성 시 헷갈리기 쉬운 부분만 골라 기...
도입 컬럼을 한 번에 바꾸면 이전 애플리케이션과 새 애플리케이션이 동시에 동작하는 배포 구간에서 한쪽이 실패할 수 있다. Expand-Contract는 호환 가능한 구조를 먼...
도입 Deadlock은 두 트랜잭션이 서로 상대방의 잠금 해제를 기다리는 순환 대기다. InnoDB는 이를 감지하면 한 트랜잭션을 희생시켜 오류 1213을 반환하고 다른 트랜...
CRUD 문법 자체는 단순하지만 운영 데이터에서 어려운 부분은 문법이 아니라 의도한 행만 변경했는지 확인하는 과정이다. 잘못된 WHERE 하나가 여러 행을 수정하거나 삭제할 수 있...
MariaDB 10.11 덤프·복원 검증 — customers 테이블로 원본과 대상 비교하기 덤프 파일이 만들어졌다는 사실만으로 복원이 제대로 끝났다고 판단할 수는 없다. 이...
도입 ALTER TABLE이 끝나지 않을 때 테이블 크기만 의심하면 원인을 놓칠 수 있다. Waiting for table metadata lock 상태라면 다른 세션의 열린...