【问题标题】:MySQL KEY questionMySQL KEY 问题
【发布时间】:2009-12-08 23:07:40
【问题描述】:
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 cmets 应用程序生成的。我相信我了解这里发生的大部分事情,除了 KEY 部分(我了解 PRIMARY KEY 的目的)。

【问题讨论】:

    标签: sql mysql django


    【解决方案1】:

    create table 列表的 MySQL 文档:

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

    所以KEY 只是index 的另一个词。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        KEYs 是这里的索引。

        【讨论】:

          【解决方案4】:

          KEY 条目指定要索引的一列或多列。与 PRIMARY KEY 不同的是,如果没有额外的修饰符,它们不能保证是唯一的。

          【讨论】:

            【解决方案5】:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-06-29
              • 2010-12-15
              • 2019-02-12
              • 2021-12-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多