MySQL是为主键创建额外的索引还是将数据本身用作索引

Does MySQL create an extra index for primary key or uses the data itself as an amp;quot;indexamp;quot;(MySQL是为主键创建额外的索引还是将数据本身用作索引)
本文介绍了MySQL是为主键创建额外的索引还是将数据本身用作索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

找不到明确的答案。 我知道当您创建主键时,MySQL会根据该主键对数据进行排序,问题是,它实际上是创建了另一个索引,还是使用实际数据作为索引,因为它应该按主键排序?

编辑: 如果我有一个表,具有索引A和索引B,但没有主键,那么我有数据+索引A+索引B。如果我将表更改为将索引A的列作为主键,我将只有数据(它也用作索引)+索引B,对吗?以上是内存使用量

推荐答案

Clustered and Secondary Indexes

每个InnoDB表都有一个特殊的索引,称为聚集索引,行的数据存储在其中。通常,聚集索引是主键的同义词。要从查询、插入和其他数据库操作中获得最佳性能,您必须了解InnoDB如何使用聚集索引来优化每个表的最常见的查找和DML操作。

  • 在表上定义主键时,InnoDB会将其用作聚集索引

  • 如果您没有为表定义主键,MySQL将定位所有键列都不为空的第一个唯一索引,并且InnoDB将其用作聚集索引。

  • 如果表没有主键或合适的唯一索引,InnoDB会在包含行ID值的合成列上在内部生成一个名为GEN_CLUST_INDEX的隐藏聚集索引。按照InnoDB分配给此类表中各行的ID进行排序。行ID是一个6字节的字段,随着新行的插入而单调增加。因此,按行ID排序的行实际上是按插入顺序排列的。

聚集索引如何加快查询速度

通过聚集索引访问行很快,因为索引搜索直接指向包含所有行数据的页。如果表很大,则与使用索引记录中的不同页存储行数据的存储组织相比,聚集索引体系结构通常可以节省磁盘I/O操作。

这篇关于MySQL是为主键创建额外的索引还是将数据本身用作索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)