是主键在MySQL自动索引?是主键在MySQL自动索引?(Is the primary key au

2019-05-14 10:07发布

你定义主键时,需要明确的创建索引,或者是隐含的? 答案是相同的MyISAM和InnoDB?

Answer 1:

主键索引始终。 这对于MyISAM和InnoDB相同,一般是,在所有支持索引所有的存储引擎如此。



Answer 2:

据http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html它会出现,这将是隐式



Answer 3:

即使这个被要求在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表还支持散列索引。



Answer 4:

主键索引隐含两个MyISAM和InnoDB。 您可以通过使用EXPLAIN的查询,使得使用该主键的验证这一点。



Answer 5:

你不必为一个主键显式地创建一个索引...它在默认情况下完成的。



Answer 6:

我想这就是答案

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)


Answer 7:

索引是对那些经常在where子句中使用的列最佳使用,并且在任何种类的分类,比如“按订单”。 你可能是一个更复杂的数据库上工作,所以这是很好的记住一些简单的规则。

  • 指标减缓插入和更新,所以你要对频繁更新的列谨慎使用它们。
  • 索引加快地方by子句和秩序。 请仔细考虑如何使你的数据将构建表时使用。 还有一些其他的事情要记住。 如果你的表是非常小的,也就是说,只有几个员工,这是糟糕的使用索引,而不是离开它,就让它做一个表扫描。

  • 指数其实只派上用场,与有大量行的表。

  • 另一件事要记住,这是我们员工的数据库的情况下一个反面的是,如果该列是可变长度,索引(以及大多数MySQL的)进行更有效。

  • 不要忘记加入呢! 索引连接字段加快速度。



Answer 8:

主键始终是自动索引和独特的。 所以,要小心不要创建冗余索引。

例如,如果你创建了一个表作为这样的

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

因为你想索引的主键,就可以强制执行的唯一约束,你实际上最终建立在三个指标foo



文章来源: Is the primary key automatically indexed in MySQL?