2009-12-08 3 views
0
CREATE TABLE `django_comments` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `content_type_id` int(11) NOT NULL, 
    `object_pk` longtext NOT NULL, 
    `site_id` int(11) NOT NULL, 
    `user_id` int(11) DEFAULT NULL, 
    `user_name` varchar(50) NOT NULL, 
    `user_email` varchar(75) NOT NULL, 
    `user_url` varchar(200) NOT NULL, 
    `comment` longtext NOT NULL, 
    `submit_date` datetime NOT NULL, 
    `ip_address` char(15) DEFAULT NULL, 
    `is_public` tinyint(1) NOT NULL, 
    `is_removed` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `django_comments_content_type_id` (`content_type_id`), 
    KEY `django_comments_site_id` (`site_id`), 
    KEY `django_comments_user_id` (`user_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

나는 우리가 만들고있는 장고 응용 프로그램과 함께 사용할 수 있도록 데이터베이스를 마이그레이션하는 중입니다. 위의 내용은 내장 Django 주석 응용 프로그램에 의해 생성됩니다. 나는 KEY 부분을 제외하고 여기서 무엇이 일어나고 있는지 대부분 이해하고 있다고 믿는다 (나는 PRIMARY KEY의 목적을 이해한다).MySQL 키 질문

답변

2

MySQL의 문서 :

| {INDEX|KEY} [index_name] [index_type] (index_col_name,...) 
    [index_option] ... 

는 그래서 KEYindex에 대한 또 다른 단어입니다.

0

KEY 항목은 색인 할 열을 지정합니다. PRIMARY KEY과 달리 추가 수정 자 없이는 고유하지 않을 수 있습니다.

1

KEY은 이러한 열에 대한 색인을 작성합니다. 인덱스가 정렬되고 검색 속도가 빨라집니다. 그러나 인덱스는 행이 삽입/삭제 될 때마다 저장 공간과 유지 보수가 필요합니다. 이러한 이유 때문에 많이 검색된 열이나 특정 제약 조건이 필요한 열만 색인화합니다. 일반 인덱스는 PRIMARY KEY와 달리 고유 한 값을 적용하지 않습니다.

테이블에서 인덱싱 된 열은 다른 테이블과 조인 할 때 (아마) 사용됩니다. 테이블을 조인 할 때 DBMS는 다른 테이블에서 값을 검색해야하며 열이 인덱싱되면 훨씬 빠르게 처리됩니다.

(참고 : 테이블의 MyISAM을 사용하기 때문에, 당신은 "진짜"외래 키 보장 무결성을 필요가 없습니다 당신이 이노 및 설정 관계를 사용할 필요가있는 경우.)