mysql - 具有自动增量列的插入性能

标签 mysql sql sql-server

如果我的表的 PK 是自动递增列,并且我的表有一个仅包含该列的索引,那么与完全没有键/索引相比,对性能的影响是什么?

我很好奇对 MySQL 和 MS SQL 的影响 - 是否存在差异。

更新

为了澄清,我的表还有其他列,但它们都不是键/索引。我现在只关心插入性能。

最佳答案

在带有 InnoDB 的 MySQL 中,如果您未指定 PK 或没有 UK,那么它将自动创建一个隐藏列,该隐藏列与用于表集群的自动增量列非常相似(请参阅 the corresponding documentation )。因此,无论您是否显式定义,都会存在某种带有索引的自动递增列。因此,显式添加一个不会对性能产生负面影响(在这两种情况下,插入都会根据集群索引完成),恰恰相反,如果您查询该列,它是 MySQL 中最快的访问路径。

根据我收集到的有关 MS SQL Server 的信息,它提供了一种非聚集选项,即一种指定表而无需 PK 且无需使用任何索引进行组织的方法。在这种情况下,由于存在附加数据,因此将自动增量列指定为 PK 会产生一定的开销。并且根据您是否指定集群,它必须像MySQL一样根据索引插入数据(集群)或者可以将数据放在最后(非集群)

Index-Organized Tables and Clustered Indexes”更详细地介绍了各种数据库的此类内容。

关于mysql - 具有自动增量列的插入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935357/

相关文章:

mysql - 如何为 wiki 系列建立数据库?

mysql - 从 MS SQL 服务器更新 MySql

php - 选择 * 匹配当前日期大于现在和当前时间大于现在的位置

sql-server - 如何避免ms-sql select语句中被0除?

php - MySql 表如果不存在则插入,否则更新非唯一列

条件有效时的Mysql查询然后提取字符串

sql - 查找具有唯一列的所有行,仅查找最新的

mysql - 如何在一个表中使用外键在另一个表中使用主键

sql-server - 在 sql server 中从 real 转换为 money 数据类型时,你会失去精度吗?

sql-server - T-SQL : How to calculate a grand total of values