Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当I';我确信它是独一无二的,而且永远都是独一无二的?_Mysql_Sql_Database_Database Design_Surrogate Key - Fatal编程技术网

Mysql 当I';我确信它是独一无二的,而且永远都是独一无二的?

Mysql 当I';我确信它是独一无二的,而且永远都是独一无二的?,mysql,sql,database,database-design,surrogate-key,Mysql,Sql,Database,Database Design,Surrogate Key,我已经寻找了一个满意的答案,一个更具体一点,我的特殊问题,现在有一段时间了,但有用。我不知道我是否只是看对了地方,但这里有: 我从一个应用程序中提取数据,然后对其进行操作并发送到我自己的服务器。在提取的数据中,有一个最初位于应用程序数据库中的自动递增标识符。我刚才检索到的这个标识符的一个示例是955534861。不自动增加我的主键,只使用我知道的并且将始终保持唯一的值,这不是更好、更有效的设计吗?还是应该研究代理键之类的概念 提前感谢。主键,通常是一个自动递增的ID,也是MySQL用来作为行标识

我已经寻找了一个满意的答案,一个更具体一点,我的特殊问题,现在有一段时间了,但有用。我不知道我是否只是看对了地方,但这里有:

我从一个应用程序中提取数据,然后对其进行操作并发送到我自己的服务器。在提取的数据中,有一个最初位于应用程序数据库中的自动递增标识符。我刚才检索到的这个标识符的一个示例是955534861。不自动增加我的主键,只使用我知道的并且将始终保持唯一的值,这不是更好、更有效的设计吗?还是应该研究代理键之类的概念


提前感谢。

主键,通常是一个自动递增的ID,也是MySQL用来作为行标识符的,所以应该不使用它。如果您需要应用程序为其他目的生成的辅助键,您可能希望将其添加为另一列,并在其上添加
UNIQUE
索引


在其他有适当行标识符机制的数据库中,这不是一个问题。

主键,通常是一个自动递增的ID,也是MySQL用作行标识符的,因此应该单独使用它。如果您需要应用程序为其他目的生成的辅助键,您可能希望将其添加为另一列,并在其上添加
UNIQUE
索引


在其他有适当行标识符机制的数据库中,这不是一个问题。

这会让人有点讨厌,但请注意:

只要键值是唯一的,它就可以发挥作用。但对于性能,理想情况下,您希望关键值尽可能短

guid是常用的,因为从统计上看,它们不太可能被重复。但这是以大小为代价的:它们有128位长,这使得它们比机器字长。要比较两个guid(排序或向下迁移b树以获取索引时必须重复进行),需要多个处理器指令来加载和比较值。当缓存到内存中时,它们将消耗更多内存

自动递增键值的优点是

  • 它们保证是独一无二的。代理索引值仅预测为唯一
  • 因为它们将在其基础数据类型的范围内具有完整的值覆盖率,所以可以使用最紧凑的类型。这使得索引更小,比较操作更有效
  • 因为可以使用尽可能小的类型,所以在单个数据库页上可以存储更多的索引值,这意味着在搜索或加入该值时,更可能得到缓存命中。这意味着,在其他条件相同的情况下,性能会有所改善。
  • 在大多数数据库中,自动递增的键都被放入数据库引擎中,因此生成它们的开销非常小。
  • 如果在键值上使用聚集索引,则新记录插入不太可能需要随机磁盘搜索,而更可能在预读期间读取,因此如果基于该键值执行任何类型的顺序处理或查找,它可能会运行得更快

    • 这会让人觉得有点书呆子,但请容忍我:

      只要键值是唯一的,它就可以发挥作用。但对于性能,理想情况下,您希望关键值尽可能短

      guid是常用的,因为从统计上看,它们不太可能被重复。但这是以大小为代价的:它们有128位长,这使得它们比机器字长。要比较两个guid(排序或向下迁移b树以获取索引时必须重复进行),需要多个处理器指令来加载和比较值。当缓存到内存中时,它们将消耗更多内存

      自动递增键值的优点是

      • 它们保证是独一无二的。代理索引值仅预测为唯一
      • 因为它们将在其基础数据类型的范围内具有完整的值覆盖率,所以可以使用最紧凑的类型。这使得索引更小,比较操作更有效
      • 因为可以使用尽可能小的类型,所以在单个数据库页上可以存储更多的索引值,这意味着在搜索或加入该值时,更可能得到缓存命中。这意味着,在其他条件相同的情况下,性能会有所改善。
      • 在大多数数据库中,自动递增的键都被放入数据库引擎中,因此生成它们的开销非常小。
      • 如果在键值上使用聚集索引,则新记录插入不太可能需要随机磁盘搜索,而更可能在预读期间读取,因此如果基于该键值执行任何类型的顺序处理或查找,它可能会运行得更快

      您描述的情况类似于我的主要工作,即维护数据仓库。我们从其他系统获取数据并存储

      发生在我们身上的事情是这些“其他系统”发生了变化。这导致新版本的“其他系统”可能会与以前的系统重复唯一标识符。我们通过在数据仓库中的记录中添加一些东西来解决这个问题,以保证它的唯一性。它可能是标识源系统的字段,也可能是日期。它从来不是自动生成的数字


      如果这种情况发生在您身上,您可能需要扩展您的选择。

      您描述的情况类似于我的主要工作,即维护数据仓库。我们从其他系统获取数据并存储

      发生在我们身上的事情是这些“其他系统”发生了变化。这就导致了新的