복붙노트

[SQL] 덮여 지수는 무엇입니까?

SQL

덮여 지수는 무엇입니까?

난 그냥 일부 데이터베이스 토론에 인덱스를 포함 용어를 들었어요 - 그것은 무엇을 의미 하는가?

해결법

  1. ==============================

    1.커버링 인덱스가 가능성이 더 모두 포함하고, 인덱스, 당신은 쿼리에 필요한 컬럼.

    커버링 인덱스가 가능성이 더 모두 포함하고, 인덱스, 당신은 쿼리에 필요한 컬럼.

    예를 들어,이 :

    SELECT *
    FROM tablename
    WHERE criteria
    

    일반적으로 기준을 사용하여 검색 할 행의 해결 속도를 높이기 위해 인덱스를 사용하지만 그것은 행을 검색하기 위해 전체 테이블로 이동합니다.

    그러나, 인덱스가 열 1 열, 2 열 및 3 열 포함 된 경우,이 SQL :

    SELECT column1, column2
    FROM tablename
    WHERE criteria
    

    , 특히 인덱스는 행을 검색하기 위해 테이블에 갈 필요가 없습니다 있도록 행이 인덱스가 이미있는 거 관심의 열 값을 포함, 검색 할 수있는 해상도의 속도로 사용될 수 있음을 제공 하지만 인덱스에서 직접 결과를 생성 할 수 있습니다.

    이것은 전형적인 쿼리를 해결하기 위해 어떤 행을 1-2 열을 사용하고 있음을 알 경우도 사용할 수, 그들은 모두에서 동일 있다면 다음 일반적으로 (그 여분의 열을 추가하는 것이 도움이 될 수있는 또 다른 1-2 열을 추가 할 수 있습니다 ) 인덱스에, 그래서 쿼리 프로세서는 인덱스 자체에서 모든 것을 얻을 수 있습니다.

    다음은 기사의 : 인덱스 취재의 부스트 주제에 대한 SQL Server 쿼리 성능.

  2. ==============================

    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. ==============================

    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. ==============================

    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/

  5. from https://stackoverflow.com/questions/62137/what-is-a-covered-index by cc-by-sa and MIT license