use-the-index-luke 저자 Markus Winand
---------------------------------------------
Markus Winand는 SQL에 대한 통찰력을 제공하고 다양한 시스템이 SQL을 지원하는 방법을 modern-sql.com 에서 보여줍니다. 이전에 그는 use-the-index-luke.com 을 만들었는데, 지금도 활발하게 유지되고 있습니다. Markus는 winand.at 를 통해 강사, 연사 및 컨설턴트로 고용될 수 있습니다.
---------------------------------------------
You can upload a Korean translation of use-the-index-luke.com on your blog
Thank you from the bottom of my heart to author Makus Winand for allowing me.
These are translations that I use for studying by using a papago (google translate)
The translations may not be correct or there may be a typo.
I'd appreciate it if you could point it out in the comments.
---------------------------------------------
---------------------------------------------
use-the-index-luke.com 의 한글번역본을 블로그에 업로드 해도 된다고
허락해주신 Makus Winand 저자님께 진심으로 감사합니다.
이 번역본들은 제가 공부용도로 번역기(papago, google transrate)를 돌려서
번역한 내용들이라 맞지 않거나, 오타가 있을수 있습니다.
댓글로 지적해주시면 감사하겠습니다.
---------------------------------------------
Delete
ㄴ https://use-the-index-luke.com/sql/dml/delete
삽입문과 달리 delete 문에는 2장 "The Where Clause"에 설명된 모든 메서드를 사용하여 인덱스의 직접적인 이점을 얻을 수 있는 where 절이 있습니다. 실제로 delete 문은 선택 항목과 같이 작동하며 이후에 식별된 행을 삭제하는 추가 단계를 거칩니다.
행을 실제로 삭제하는 것은 새 행을 Insert하는 것과 유사한 프로세스입니다. 특히 인덱스에서 참조를 제거하고 인덱스 트리의 균형을 유지하기 위한 작업입니다.
따라서 그림 8.2에 표시된 성능 차트는 Insert를 위해 표시된 것과 매우 유사합니다.
Figure 8.2 Delete Performance by Number of Indexes
----------------------------------------------------------
----------------------------------------------------------
이론적으로 인덱스가 없는 테이블의 경우 Insert의 경우와 마찬가지로 최상의 삭제 성능을 기대할 수 있습니다.
그러나 Index가 없는 경우 데이터베이스는 삭제할 행을 찾기 위해 전체 테이블을 읽어야 합니다. 즉, 행을 삭제하는 것은 빠르지만 찾는 것은 매우 느립니다.
따라서 이 경우는 그림 8.2에 나와 있지 않습니다.
그러나 테이블의 많은 부분을 반환하는 경우 인덱스 없이 select 문을 실행하는 것이 의미가 있는 것 처럼 인덱스 없이 delete 문을 실행하는 것도 의미가 있습니다.
----------------------------------------------------------
Tip
delete 및 update 문에도 실행 계획이 있습니다.
----------------------------------------------------------
where 절이 없는 delete문은 데이터베이스가 인덱스를 사용할 수 없는 명백한 예이지만, 이는 고유한 SQL 명령인 잘라내기 테이블을 갖는 특수한 경우입니다. 이 명령은 한 번의 샷에서 모든 행을 삭제한다는 점을 제외하고는 삭제하지 않는 것과 동일한 효과를 가집니다. 매우 빠르지만 두 가지 중요한 부작용이 있습니다.
(1) 암묵적 커밋(예외 : PostgreSQL 및 SQLServer);
(2) 트리거를 실행하지 않습니다.
----------------------------------------------------------
Side Effects of MVCC
MVCC(Multiversion Concurrency Control)는 비차단 동시 데이터 액세스 및 일관된 트랜잭션 보기를 가능하게 하는 데이터베이스 메커니즘입니다. 그러나 구현은 데이터베이스마다 다르며 성능에 상당한 영향을 미칠 수도 있습니다.
예를 들어 PostgreSQL 데이터베이스는 버전 정보(= 가시성 정보)만 테이블 수준에 유지합니다. 행을 삭제하면 테이블 블록에 "deleted" 플래그가 설정됩니다. 따라서 PostgreSQL's 삭제 성능은 테이블의 인덱스 수에 따라 달라지지 않습니다.
테이블 행의 물리적 삭제 및 관련 인덱스 유지 관리는
VACUUM 프로세스 중에만 수행됩니다.
----------------------------------------------------------
'use-the-index-luke' 카테고리의 다른 글
A.Execution plans (0) | 2023.11.22 |
---|---|
8.3 Update (0) | 2023.11.22 |
8.1 Insert (1) | 2023.11.14 |
8장 Insert, Delete and Update (0) | 2023.11.10 |
7.3 Window-Functions (0) | 2023.11.10 |