[SQL] 덮여 지수는 무엇입니까?
SQL덮여 지수는 무엇입니까?
난 그냥 일부 데이터베이스 토론에 인덱스를 포함 용어를 들었어요 - 그것은 무엇을 의미 하는가?
해결법
-
==============================
1.커버링 인덱스가 가능성이 더 모두 포함하고, 인덱스, 당신은 쿼리에 필요한 컬럼.
커버링 인덱스가 가능성이 더 모두 포함하고, 인덱스, 당신은 쿼리에 필요한 컬럼.
예를 들어,이 :
SELECT * FROM tablename WHERE criteria
일반적으로 기준을 사용하여 검색 할 행의 해결 속도를 높이기 위해 인덱스를 사용하지만 그것은 행을 검색하기 위해 전체 테이블로 이동합니다.
그러나, 인덱스가 열 1 열, 2 열 및 3 열 포함 된 경우,이 SQL :
SELECT column1, column2 FROM tablename WHERE criteria
, 특히 인덱스는 행을 검색하기 위해 테이블에 갈 필요가 없습니다 있도록 행이 인덱스가 이미있는 거 관심의 열 값을 포함, 검색 할 수있는 해상도의 속도로 사용될 수 있음을 제공 하지만 인덱스에서 직접 결과를 생성 할 수 있습니다.
이것은 전형적인 쿼리를 해결하기 위해 어떤 행을 1-2 열을 사용하고 있음을 알 경우도 사용할 수, 그들은 모두에서 동일 있다면 다음 일반적으로 (그 여분의 열을 추가하는 것이 도움이 될 수있는 또 다른 1-2 열을 추가 할 수 있습니다 ) 인덱스에, 그래서 쿼리 프로세서는 인덱스 자체에서 모든 것을 얻을 수 있습니다.
다음은 기사의 : 인덱스 취재의 부스트 주제에 대한 SQL Server 쿼리 성능.
-
==============================
2.인덱스를 다루는 것은 평범한 인덱스입니다. 이 데이터를 분석 할 필요없이 쿼리를 만족시킬 수있는 경우는 "커버"라고.
인덱스를 다루는 것은 평범한 인덱스입니다. 이 데이터를 분석 할 필요없이 쿼리를 만족시킬 수있는 경우는 "커버"라고.
예:
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 서버에서 데이터를 검색하는 가장 빠른 방법 중 하나입니다.
-
==============================
3.커버링 인덱스는 인덱스있는 "커버"주어진 쿼리 / 작업에 전혀 물리적 테이블에 액세스 할 필요가 제거 특정 테이블에서 필요한 모든 열.
커버링 인덱스는 인덱스있는 "커버"주어진 쿼리 / 작업에 전혀 물리적 테이블에 액세스 할 필요가 제거 특정 테이블에서 필요한 모든 열.
훨씬 더 빨리 통상 - 인덱스 원하는 열 (또는 이들의 상위)을 포함하기 때문에, 접속 테이블은 인덱스 룩업 또는 주사로 대체 될 수있다.
커버 열 :
커버 인덱스가 자주 검색을위한 좋은 혜택을 제공 할 수 있지만, 그들은 오버 헤드 / 업데이 트를 삽입 다소 추가합니까; 모든 업데이 트에 추가 또는 더 큰 인덱스 행을 작성할 필요 때문.
커버링 인덱스는 아마 합류 쿼리에 대한 성능 기술과 같은 대부분의 가치가있다. 가입 쿼리가 더 많은 비용 및 가능성이 후 단일 테이블하게 검색 높은 비용 성능 문제를 겪을 있기 때문입니다.
예를 들면 :
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);
보다:
-
==============================
4.여기에 열을 아래, 당신은 단지 색인을 ID로 간단한 테이블이 있다고 가정하자 :
여기에 열을 아래, 당신은 단지 색인을 ID로 간단한 테이블이 있다고 가정하자 :
Id (Int), Telephone_Number (Int), Name (VARCHAR), Address (VARCHAR)
당신은 쿼리 아래를 실행하고 I / O 호출 또는하지 않고 효율적으로 수행의 사용 인덱스 여부, 그리고 여부를 확인해야 상상해보십시오. 당신은 단지 ID를 인덱스를 생성 한 기억하십시오.
SELECT Id FROM mytable WHERE Telephone_Number = '55442233';
TELEPHONE_NUMBER이 / O 호출 I을 사용하여 테이블에서 행을 가져 오기 위해이 요구를 인덱싱되지 않기 때문에 당신은 당신이 dissappointed 될이 쿼리의 성능을 확인합니다. 그래서,이 인덱싱되지 않은 쿼리에 약간의 열이,이 때문에 색인 덮고없는 자주 I / O 호출에있는 리드.
그것을 커버 인덱스를 확인하려면 (ID, TELEPHONE_NUMBER)에 복합 인덱스를 작성해야합니다.
자세한 내용은이 블로그를 참조하십시오 : https://www.percona.com/blog/2006/11/23/covering-index-and-prefix-indexes/
from https://stackoverflow.com/questions/62137/what-is-a-covered-index by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL에서 두 날짜 사이의 전체 개월 수를 계산 (0) | 2020.04.01 |
---|---|
[SQL] 어떻게 여러 행이 저장 프로 시저를 생성하지 않고 오라클의 하나로 연결될 수있다? [복제] (0) | 2020.04.01 |
[SQL] (SQL 문) 마지막으로 삽입 된 행의 ID를 가져옵니다 [중복] (0) | 2020.04.01 |
[SQL] 밀리 초 단위로 오라클이 타임 스탬프의 차이를 계산 (0) | 2020.04.01 |
[SQL] 행이 최대 날짜가 테이블에서 선택 정보 (0) | 2020.04.01 |