Mysql 当I';我确信它是独一无二的,而且永远都是独一无二的?
我已经寻找了一个满意的答案,一个更具体一点,我的特殊问题,现在有一段时间了,但有用。我不知道我是否只是看对了地方,但这里有: 我从一个应用程序中提取数据,然后对其进行操作并发送到我自己的服务器。在提取的数据中,有一个最初位于应用程序数据库中的自动递增标识符。我刚才检索到的这个标识符的一个示例是955534861。不自动增加我的主键,只使用我知道的并且将始终保持唯一的值,这不是更好、更有效的设计吗?还是应该研究代理键之类的概念Mysql 当I';我确信它是独一无二的,而且永远都是独一无二的?,mysql,sql,database,database-design,surrogate-key,Mysql,Sql,Database,Database Design,Surrogate Key,我已经寻找了一个满意的答案,一个更具体一点,我的特殊问题,现在有一段时间了,但有用。我不知道我是否只是看对了地方,但这里有: 我从一个应用程序中提取数据,然后对其进行操作并发送到我自己的服务器。在提取的数据中,有一个最初位于应用程序数据库中的自动递增标识符。我刚才检索到的这个标识符的一个示例是955534861。不自动增加我的主键,只使用我知道的并且将始终保持唯一的值,这不是更好、更有效的设计吗?还是应该研究代理键之类的概念 提前感谢。主键,通常是一个自动递增的ID,也是MySQL用来作为行标识
提前感谢。主键,通常是一个自动递增的ID,也是MySQL用来作为行标识符的,所以应该不使用它。如果您需要应用程序为其他目的生成的辅助键,您可能希望将其添加为另一列,并在其上添加
UNIQUE
索引
在其他有适当行标识符机制的数据库中,这不是一个问题。主键,通常是一个自动递增的ID,也是MySQL用作行标识符的,因此应该单独使用它。如果您需要应用程序为其他目的生成的辅助键,您可能希望将其添加为另一列,并在其上添加
UNIQUE
索引
在其他有适当行标识符机制的数据库中,这不是一个问题。这会让人有点讨厌,但请注意: 只要键值是唯一的,它就可以发挥作用。但对于性能,理想情况下,您希望关键值尽可能短 guid是常用的,因为从统计上看,它们不太可能被重复。但这是以大小为代价的:它们有128位长,这使得它们比机器字长。要比较两个guid(排序或向下迁移b树以获取索引时必须重复进行),需要多个处理器指令来加载和比较值。当缓存到内存中时,它们将消耗更多内存 自动递增键值的优点是
- 它们保证是独一无二的。代理索引值仅预测为唯一
- 因为它们将在其基础数据类型的范围内具有完整的值覆盖率,所以可以使用最紧凑的类型。这使得索引更小,比较操作更有效
- 因为可以使用尽可能小的类型,所以在单个数据库页上可以存储更多的索引值,这意味着在搜索或加入该值时,更可能得到缓存命中。这意味着,在其他条件相同的情况下,性能会有所改善。
- 在大多数数据库中,自动递增的键都被放入数据库引擎中,因此生成它们的开销非常小。
- 如果在键值上使用聚集索引,则新记录插入不太可能需要随机磁盘搜索,而更可能在预读期间读取,因此如果基于该键值执行任何类型的顺序处理或查找,它可能会运行得更快
- 它们保证是独一无二的。代理索引值仅预测为唯一
- 因为它们将在其基础数据类型的范围内具有完整的值覆盖率,所以可以使用最紧凑的类型。这使得索引更小,比较操作更有效
- 因为可以使用尽可能小的类型,所以在单个数据库页上可以存储更多的索引值,这意味着在搜索或加入该值时,更可能得到缓存命中。这意味着,在其他条件相同的情况下,性能会有所改善。
- 在大多数数据库中,自动递增的键都被放入数据库引擎中,因此生成它们的开销非常小。
- 如果在键值上使用聚集索引,则新记录插入不太可能需要随机磁盘搜索,而更可能在预读期间读取,因此如果基于该键值执行任何类型的顺序处理或查找,它可能会运行得更快
- 这会让人觉得有点书呆子,但请容忍我:
只要键值是唯一的,它就可以发挥作用。但对于性能,理想情况下,您希望关键值尽可能短
guid是常用的,因为从统计上看,它们不太可能被重复。但这是以大小为代价的:它们有128位长,这使得它们比机器字长。要比较两个guid(排序或向下迁移b树以获取索引时必须重复进行),需要多个处理器指令来加载和比较值。当缓存到内存中时,它们将消耗更多内存
自动递增键值的优点是
如果这种情况发生在您身上,您可能需要扩展您的选择。您描述的情况类似于我的主要工作,即维护数据仓库。我们从其他系统获取数据并存储 发生在我们身上的事情是这些“其他系统”发生了变化。这就导致了新的