MySQL KEY问题

时间:2009-12-08 23:07:40

标签: sql mysql django

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应用程序一起使用。以上是由内置的Django评论应用程序生成的。我相信我理解除了KEY部分之外的大部分内容(我理解PRIMARY KEY的目的)。

5 个答案:

答案 0 :(得分:2)

create table列出的MySQL文档:

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

因此KEY只是index的另一个词。

答案 1 :(得分:1)

KEY为这些列创建索引。索引已排序并加快搜索速度。但是,每次插入/删除行时,索引都需要存储空间和维护。因此,您只索引经常搜索的列或需要特定约束的列。请注意,与PRIMARY KEY不同,常规索引不会将值强制为唯一值。

在您的表中,索引列(可能)用于与其他表的连接。连接表时,DBMS必须在其他表中查找值,如果列被索引,这会更快。

(注意:由于该表使用MyISAM,因此您将没有“真正的”外键确保完整性。为此您需要使用InnoDB和设置关系)

答案 2 :(得分:0)

KEY是指数。

答案 3 :(得分:0)

KEY条目指定要编制索引的一列或多列。与PRIMARY KEY不同,如果没有其他修饰符,则不保证这些是唯一的。

答案 4 :(得分:0)