복붙노트

[SQL] 인덱스 및 다중 열 기본 키

SQL

인덱스 및 다중 열 기본 키

검색 가서이 특정 멍청한 놈 질문에 대한 답변을 찾을 수 없습니다. 나의 사과는 경우에 나는 그것을 놓쳤다.

MySQL 데이터베이스에서 나는 다음과 같은 기본 키 테이블이

PRIMARY KEY 아이디 (송장, 항목)

내 응용 프로그램에서 나는 또한 자주 자체 "항목"을 선택하고 자주 만 "송장"것입니다. 나는이 컬럼에 인덱스에서 도움이 될 있으리라 믿고있어.

나는 다음을 정의 할 때 MySQL은 불평하지 않습니다

INDEX (송장) INDEX (항목) PRIMARY KEY 아이디 (송장, 항목)

별도의 인덱스는 이러한 두 개의 열이 설립되었음을 -하지만 (내가 보는 방법을 알고있는 유일한 방법을 DESCRIBE 사용) 증거를 볼 수 없습니다.

질문은 그래서, 자동으로 개별적으로 인덱스 기본 키 구성하는 열은? 또한, 내 테이블의 구조를 탐구하는 DESCRIBE보다 더 좋은 방법은 무엇입니까?

해결법

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

    1.내가 MySQL을 인덱스의 내부 속속들이 잘 알고 아니지만, 두 개의 데이터베이스 공급 업체 제품에서 나는 그 노드 열의 시퀀스 된 튜플로 구성되어 있습니다 (MSSQL, 오라클) 지수는 균형 트리되는 구조와 잘 알고있는 인덱스가 정의됩니다 (시퀀스가 정의에서)

    내가 MySQL을 인덱스의 내부 속속들이 잘 알고 아니지만, 두 개의 데이터베이스 공급 업체 제품에서 나는 그 노드 열의 시퀀스 된 튜플로 구성되어 있습니다 (MSSQL, 오라클) 지수는 균형 트리되는 구조와 잘 알고있는 인덱스가 정의됩니다 (시퀀스가 정의에서)

    MySQL은 매우 다르게, (아마)를하지 않는 한 따라서, (하나 이상의 열)에있는 종합 지수는 쿼리에 의해 사용 가능한이 될 수있는 긴만큼 필터 또는 정렬 인덱스의 컬럼의 서브 세트에 의해 요구, 열 목록, 즉, 열 경우,시 전체 색인의 열 시퀀스 목록과 같은 서열, 호환되는 실제 인덱스 시퀀스의 시작에서 시작 인덱스 컬럼의 전체 집합의 정렬 된 하위 집합입니다, 빈틈이없는 말을 제외하고 ...

    쿼리를 (A, B, C, D)을에 인덱스가있을 경우 즉,이 방법은 (a), (a, b) 또는 (A, B, C)의 필터는 인덱스를 사용할 수 있다는 것을 하지만 필요에 필터링 할 것을 쿼리 (나) 또는 (다) 또는 (b, c)는 인덱스를 사용할 수 없습니다 ...

    자주 필터에 또는 종류 만 열 항목을 필요로하는 경우 따라서 귀하의 경우, 당신은 그 자체로 해당 컬럼에 다른 인덱스를 추가 할 필요가 ...

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

    2.나는 개인적으로 MySQL 데이터베이스의 구조를보고 편집 할 수 phpMyAdmin을 사용합니다. 이 웹 응용 프로그램입니다하지만 로컬 웹 서버 (I이와 phpPgAdmin 내 컴퓨터에 아파치의 인스턴스를 실행)에 충분히 잘 실행됩니다.

    나는 개인적으로 MySQL 데이터베이스의 구조를보고 편집 할 수 phpMyAdmin을 사용합니다. 이 웹 응용 프로그램입니다하지만 로컬 웹 서버 (I이와 phpPgAdmin 내 컴퓨터에 아파치의 인스턴스를 실행)에 충분히 잘 실행됩니다.

    (송장 항목)의 복합 키에 관해서는 (송장 항목) 및 송장 인덱스처럼 작용한다. 방금 항목 별 지수하려는 경우에는 해당 인덱스를 직접 추가해야합니다. 귀하의 PK는 청구서가 여러 레코드에서 같은 곳 송장에 의해 다음 항목으로 분류됩니다. 복합 PK의 순서는 고유성 집행에 대한 문제가되지 않지만, 그것은 액세스에 문제가 않습니다.

    테이블에 나는 사용한다 :

    PRIMARY KEY id (invoice, item), INDEX (item)
    
  3. ==============================

    3.테이블의 인덱스 정보를 반환하려면, 당신은 사용할 수 있습니다 :

    테이블의 인덱스 정보를 반환하려면, 당신은 사용할 수 있습니다 :

    SHOW INDEX FROM <table>;
    

    참조 : http://dev.mysql.com/doc/refman/5.0/en/show-index.html

    테이블 정보를 보려면 :

    SHOW CREATE TABLE <table>;
    

    참조 : http://dev.mysql.com/doc/refman/5.0/en/show-create-table.html

    기본 키 인덱스, 그래서 추가 인덱스를 만들 필요가 없습니다. 당신은 CREATE 구문에서 그들에 대한 자세한 정보 (여기에 삽입 너무 많이있다) 찾을 수 있습니다 :

    http://dev.mysql.com/doc/refman/5.0/en/create-table.html

  4. ==============================

    4.지수 및 복합 기본 키 차이가 있습니다. 아래 같은 복합 인덱스를 정의한 경우

    지수 및 복합 기본 키 차이가 있습니다. 아래 같은 복합 인덱스를 정의한 경우

    INDEX idx(invoice,item)  
    

    인덱스 작동 실 거예요 당신이 항목을 기반으로 별도의 인덱스를 추가 할 필요가 쿼리 할 경우

    INDEX itemidx(item)  
    

    그러나, 당신은 다음과 같은 복합 기본 키를 정의한 경우

    PRIMARY KEY(invoice, item)  
    

    당신이 항목을 기반으로 쿼리 및 별도의 인덱스가 필요하지 않은 경우 지수는 작동합니다.

    예를 들어 작업 :

    mysql>create table test ( col1 int(20), col2 int(20) ) primary key(col1,col2);
    mysql>explain select * from test where col2 = 1;
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra                    |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    |  1 | SIMPLE      | test  | index | NULL          | PRIMARY | 8       | NULL |   10 | Using where; Using index |
    +----+-------------+-------+-------+---------------+---------+---------+------+------+--------------------------+
    
  5. ==============================

    5.나는 MySQL의에 익숙한 아니지만, 일반적으로 다중 열 인덱스는 혼자 열에 인덱스와 인덱스의 첫 번째 열에서 똑같이 유용합니다. 다중 열 인덱스는 인덱스에 하나의 컬럼에 대해 추가의 열이 나타날 질의 덜 유용해진다.

    나는 MySQL의에 익숙한 아니지만, 일반적으로 다중 열 인덱스는 혼자 열에 인덱스와 인덱스의 첫 번째 열에서 똑같이 유용합니다. 다중 열 인덱스는 인덱스에 하나의 컬럼에 대해 추가의 열이 나타날 질의 덜 유용해진다.

    이 계층 구조로 멀티 컬럼 인덱스 생각하면 몇 가지 의미가 있습니다. 인덱스의 첫 번째 열은 그래서 그냥 첫 번째 수준을 스캔의 문제입니다 검색, 계층 구조의 루트입니다. 그러나, 두 번째 열을 검색하기 위해 데이터베이스는 첫 번째 열에서 발견 된 각각의 고유 값에 대한 트리를보고있다. 이것은 대부분의 최적화 대신 풀 테이블 스캔에 사용 중단, 멀티 컬럼 인덱스에 깊이보고 귀찮게하지 않습니다 비용이 많이 드는만큼 할 수있다.

    당신은 테이블이있는 경우 예를 들어, 다음과 같이 :

    Col1 |Col2 |Col3
    ----------------
       A |   1 |   Z
       A |   2 |   Y
       A |   2 |   X
       B |   1 |   Z
       B |   2 |   X
    

    위해, 나무는 다음과 같이 보일 것입니다, 당신은 세 컬럼에 인덱스를 가지고 가정 :

    A
    +-1
      +-Z
    +-2
      +-X
      +-Y
    B
    +-1
      +-Z
    +-2
      +-X
    

    COL1을 찾고 = 'A'는 간단합니다 : 당신은 단지 2 개 주문 값을보고해야합니다. 그러나 해결의 COL3 = 'X'로, 개별적으로 주문되는 각각의 4 개의 큰 버킷에있는 값의 모든보고 있습니다.

  6. ==============================

    6.MySQL의 자동 복합 키에 대한 인덱스를 만들 수 있습니다. 쿼리에 따라, 복합 키의 개별 열에 대한 별도의 인덱스를 생성 할 수 있습니다.

    MySQL의 자동 복합 키에 대한 인덱스를 만들 수 있습니다. 쿼리에 따라, 복합 키의 개별 열에 대한 별도의 인덱스를 생성 할 수 있습니다.

    당신은 MySQL의 워크 벤치를 사용하는 경우에는 수동으로 바로 스키마를 클릭하고 테이블에 대한 모든 것을보고, 편집을 클릭하면

  7. from https://stackoverflow.com/questions/3048154/indexes-and-multi-column-primary-keys by cc-by-sa and MIT license