Covered Index 란 무엇입니까?
일부 데이터베이스 토론에서 Covered Index라는 용어를 들었습니다. 그게 무슨 뜻입니까?
포함하는 인덱스 가능성이 더 모두 포함하고, 인덱스, 당신은 쿼리에 필요한 컬럼.
예를 들어 다음과 같습니다.
SELECT *
FROM tablename
WHERE criteria
일반적으로 기준을 사용하여 검색 할 행의 확인 속도를 높이기 위해 인덱스를 사용 하지만 행을 검색 하기 위해 전체 테이블로 이동합니다.
그러나 인덱스에 column1, column2 및 column3 열이 포함 된 경우 다음 SQL :
SELECT column1, column2
FROM tablename
WHERE criteria
특정 인덱스를 사용하여 검색 할 행의 확인 속도를 높일 수있는 경우 인덱스에는 이미 관심있는 열의 값이 포함되어 있으므로 행을 검색하기 위해 테이블로 이동할 필요가 없습니다. 이지만 색인에서 직접 결과를 생성 할 수 있습니다.
일반적인 쿼리에서 1-2 개의 열을 사용하여 행을 확인한 다음 일반적으로 다른 1-2 개의 열을 추가하는 경우에도 사용할 수 있습니다. 이러한 추가 열을 추가하는 것이 좋습니다 (모두 동일한 경우). )을 인덱스에 추가하여 쿼리 프로세서가 인덱스 자체에서 모든 것을 가져올 수 있습니다.
여기에 기사가 있습니다. Index Covering 은 주제에 대한 SQL Server 쿼리 성능 을 향상시킵니다.
커버링 인덱스는 일반적인 인덱스입니다. 데이터를 분석 할 필요없이 질의를 만족시킬 수 있다면 '커버링'이라고합니다.
예:
CREATE TABLE MyTable
(
ID INT IDENTITY PRIMARY KEY,
Foo INT
)
CREATE NONCLUSTERED INDEX index1 ON MyTable(ID, Foo)
SELECT ID, Foo FROM MyTable -- All requested data are covered by index
이것은 SQL 서버에서 데이터를 검색하는 가장 빠른 방법 중 하나입니다.
커버링 인덱스는 특정 테이블에서 필요한 모든 열을 "커버"하는 인덱스로, 주어진 쿼리 / 작업에 대해 물리적 테이블에 전혀 액세스 할 필요가 없습니다.
인덱스에 원하는 열 (또는 그 상위 집합)이 포함되어 있으므로 테이블 액세스는 일반적으로 훨씬 빠른 인덱스 조회 또는 스캔으로 대체 될 수 있습니다.
다룰 열 :
- 매개 변수화 또는 정적 조건; 매개 변수화 된 또는 상수 조건에 의해 제한되는 열.
- 열 결합; 결합에 동적으로 사용되는 열
- 선택한 열; 선택한 값에 대답합니다.
커버링 인덱스는 종종 검색에 좋은 이점을 제공 할 수 있지만 삽입 / 업데이트 오버 헤드를 약간 추가합니다. 업데이트 할 때마다 추가 또는 더 큰 인덱스 행을 작성해야하기 때문입니다.
조인 된 쿼리에 대한 커버링 인덱스
커버링 인덱스는 조인 된 쿼리의 성능 기술로서 가장 가치가있을 것입니다. 조인 된 쿼리는 단일 테이블 검색보다 비용이 많이 들고 높은 비용 성능 문제를 겪을 가능성이 더 높기 때문입니다.
- 조인 된 쿼리에서 포함 인덱스는 테이블 당 고려되어야합니다.
- 각 '커버링 인덱스'는 계획에서 물리적 테이블 액세스를 제거하고 인덱스 전용 액세스로 대체합니다.
- 계획 비용을 조사하고 커버링 인덱스로 대체 할 가장 가치있는 테이블을 실험합니다.
- 이를 통해 대규모 조인 계획의 곱셈 비용을 크게 줄일 수 있습니다.
예를 들면 :
select oi.title, c.name, c.address
from porderitem poi
join porder po on po.id = poi.fk_order
join customer c on c.id = po.fk_customer
where po.orderdate > ? and po.status = 'SHIPPING';
create index porder_custitem on porder (orderdate, id, status, fk_customer);
보다:
Lets say you have a simple table with the below columns, you have only indexed Id here:
Id (Int), Telephone_Number (Int), Name (VARCHAR), Address (VARCHAR)
Imagine you have to run the below query and check whether its using index, and whether performing efficiently without I/O calls or not. Remember, you have only created an index on Id
.
SELECT Id FROM mytable WHERE Telephone_Number = '55442233';
When you check for performance on this query you will be dissappointed, since Telephone_Number
is not indexed this needs to fetch rows from table using I/O calls. So, this is not a covering indexed since there is some column in query which is not indexed, which leads to frequent I/O calls.
To make it a covered index you need to create a composite index on (Id, Telephone_Number)
.
For more details, please refer to this blog: https://www.percona.com/blog/2006/11/23/covering-index-and-prefix-indexes/
참고URL : https://stackoverflow.com/questions/62137/what-is-a-covered-index
'Development Tip' 카테고리의 다른 글
node.js 앱간에 코드를 공유하는 방법은 무엇입니까? (0) | 2020.11.18 |
---|---|
Qt 정적 연결 및 배포 (0) | 2020.11.18 |
Rails has_one : 연결을 통해 (0) | 2020.11.18 |
.NET의 System.Version이 Major.Minor.Build.Revision으로 정의 된 이유는 무엇입니까? (0) | 2020.11.18 |
adb shell su는 작동하지만 adb root는 작동하지 않습니다. (0) | 2020.11.18 |