[mysql] 기본 키는 MySQL에서 자동으로 인덱싱됩니까?

명시 적으로 인덱스를 작성해야합니까, 기본 키를 정의 할 때 암시 적입니까? 답변은 MyISAM과 InnoDB에 대해 동일합니까?



답변

기본 키는 항상 색인화됩니다. 이는 MyISAM 및 InnoDB와 동일하며 일반적으로 인덱스를 지원하는 모든 스토리지 엔진에 적용됩니다.


답변

http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html 에 따르면 이것이 암시 적 인 것처럼 보입니다.


답변

2009 년에 이것이 요청되었지만 기본 키에 대한 MySQL 설명서에 대한 실제 참조를 게시 할 것이라고 생각했습니다.
http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

테이블 의 기본 키 는 가장 중요한 쿼리에 사용하는 열 또는 열 집합을 나타냅니다. 빠른 쿼리 성능을 위해 관련 인덱스가 있습니다.

MySQL 5.0 참조는 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html을 참조하십시오.

대부분의 MySQL 인덱스 ( PRIMARY KEY , UNIQUE, INDEX 및 FULLTEXT)는 B- 트리에 저장됩니다. 공간 데이터 유형의 인덱스가 R- 트리를 사용하고 MEMORY 테이블도 해시 인덱스를 지원한다는 점은 예외입니다.


답변

기본 키는 MyISAM 및 InnoDB 모두에 대해 암시 적으로 색인됩니다. 기본 키를 사용하는 쿼리에서 EXPLAIN을 사용하여이를 확인할 수 있습니다.


답변

기본 키에 대한 인덱스를 명시 적으로 만들 필요는 없습니다. 기본적으로 수행됩니다.


답변

나는 이것이 답이라고 생각한다

mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)

mysql> show indexes from test \G
*************************** 1. row ***************************
        Table: test
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
1 row in set (0.00 sec)


답변

인덱스는 where 절과 “order by”와 같은 모든 종류의 정렬에서 자주 사용되는 열에 가장 적합합니다. 좀 더 복잡한 데이터베이스에서 작업하고있을 수 있으므로 몇 가지 간단한 규칙을 기억하는 것이 좋습니다.

  • 인덱스는 삽입 및 업데이트 속도를 늦추므로 자주 업데이트되는 열에주의해서 사용하려고합니다.
  • 인덱스는 절과 순서에 따라 속도를 높입니다. 테이블을 만들 때 데이터가 어떻게 사용되는지에 대해 생각해야합니다. 기억해야 할 것이 몇 가지 더 있습니다. 테이블이 매우 작은 경우 (예 : 직원 수가 적은 경우) 테이블을 그대로두고 테이블 스캔을 수행하는 것보다 인덱스를 사용하는 것이 좋지 않습니다.

  • 인덱스는 실제로 많은 행이있는 테이블에서만 유용합니다.

  • 직원 데이터베이스의 상황에서 단점으로 기억해야 할 또 다른 사항은 열이 가변 길이 인 경우 인덱스 (및 대부분의 MySQL)의 효율성이 훨씬 떨어진다는 것입니다.

  • 조인도 잊지 마십시오! 인덱스 조인 필드는 작업 속도를 높입니다.