programing

프라이머리 키는 MySQL에서 자동으로 인덱싱됩니까?

javaba 2022. 12. 25. 09:50
반응형

프라이머리 키는 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, UNIQURE, INDEX 및 FULLTEX)는 B-트리에 저장됩니다.단, 공간 데이터 유형의 인덱스는 R-트리를 사용하며 MEMORY 테이블은 해시 인덱스를 지원합니다.

프라이머리 키는 MyISAM과 InnoDB 양쪽에 대해 암묵적으로 인덱싱됩니다.이를 확인하려면 프라이머리 키를 사용하는 쿼리에서 EXPLINE을 사용합니다.

이게 정답인 것 같아요.

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)

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

인덱스는 절에서 자주 사용되는 열 및 "순서 기준"과 같은 모든 종류의 정렬에 가장 적합합니다.보다 복잡한 데이터베이스 작업을 수행할 수 있으므로 몇 가지 간단한 규칙을 기억하는 것이 좋습니다.

  • 인덱스는 삽입 및 업데이트 속도를 느리게 하므로 자주 업데이트되는 열에서 신중하게 사용해야 합니다.
  • 인덱스는 절과 순서가 지정된 곳에서 속도가 향상됩니다.테이블을 작성할 때 데이터가 어떻게 사용될지에 대해 고려해야 합니다.몇 가지 더 기억해야 할 것이 있습니다.테이블이 매우 작을 경우(예: 직원 수가 적은 경우) 인덱스를 사용하지 않고 테이블 스캔만 하는 것보다 인덱스를 사용하는 것이 더 나쁩니다.

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

  • 또 하나 기억해야 할 것은 직원 데이터베이스의 사기입니다.컬럼이 가변 길이일 경우 인덱스(MySQL의 대부분과 마찬가지로)의 효율이 훨씬 떨어집니다.

  • 가입도 잊지 마세요!색인화된 결합 필드를 통해 작업 속도가 향상됩니다.

기본 키는 항상 자동으로 인덱싱되고 고유합니다.따라서 중복 인덱스를 생성하지 않도록 주의하십시오.

예를 들어 테이블을 작성한 경우

CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
  UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;

를 붙여서는 프라이머리 키에 3개의 foo!

네, 프라이머리 키 컬럼은 프라이머리 키의 제약에 따라 다른 인덱스된 컬럼으로 생각할 수 있습니다.

대부분의 사용 예에서는 테이블에 대한 쿼리가 기본 키가 아닌 열/열을 기준으로 행을 필터링할 수 있기 때문에 기본 키와 인덱스된 열/열 모두 테이블에 필요합니다. 이 경우 보통 이러한 열/열도 인덱스화됩니다.

언급URL : https://stackoverflow.com/questions/1071180/is-the-primary-key-automatically-indexed-in-mysql

반응형