索引与自动增量ID设置为PK

时间:2018-06-06 17:59:26

标签: mysql sql database

在MySQL中,Index与 ID 设置为AUTO_INCREMENT和主键有什么区别?

这是否也会提高搜索数据库的速度?或AUTO_INCREMENT ID 仅仅是出于用户的目的,计算机在搜索数据库时是否考虑过它?在w3schools.com上阅读INDEX我发现了这一行:

  

索引用于非常快速地从数据库中检索数据。该   用户无法看到索引,它们只是用来加速   搜索/查询。

3 个答案:

答案 0 :(得分:1)

在MySQL中,主键在键上创建索引。 。 。但原始数据页是索引的叶子。这可能有点复杂,但结果是数据实际上是在数据页上排序的。

常规索引被实现为b树(注意:“b”标准为“平衡”而不是“二进制”,与许多人认为的相反)。叶子与原始数据分开存储。

auto_increment是表的一列的属性,其中值在每个插入上设置为新值,并且新值大于先前值。增量通常为1,但不保证。 auto_increment与索引没有直接关系,但几乎总是与表的主键相关联。

因此,在这两种情况下,您都有一个索引。主键索引略小,因为存储与数据页本身相结合。另一方面,数据需要在磁盘上按顺序排列,这会使插入和更新复杂化。另一方面,自动增量可确保所有新行都位于数据末尾。另一方面,我已经失控了。

答案 1 :(得分:0)

索引列时,可以创建二叉树(或可能是其他数据结构)以加快搜​​索过程。

默认情况下,ID或主键已编入索引。

Auto_Increment意味着您希望MySQL在插入新行时自动为列设置值。该值将逐步设置。

答案 2 :(得分:0)

AUTO_INCREMENT是一个整数序列生成器,没有别的。它与任何类型的索引没有固有的关系,只存在生成唯一的序列号。它经常用于生成经常用作主键的整数surrogate keys

您不必使用AUTO_INCREMENT或整数ID作为索引,只要您有一个或多个字段可用于唯一标识行。

事实上,就可伸缩性而言,像AUTO_INCREMENT这样的序列生成器会适得其反,因为你只能拥有一个序列生成器的实例,限制了“主/写”服务器的数量和/或瓶颈将性能插入到运行生成器的节点的性能。