Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Database 将唯一ID添加到表中时,使其随机有什么好处?_Database_Oracle - Fatal编程技术网

Database 将唯一ID添加到表中时,使其随机有什么好处?

Database 将唯一ID添加到表中时,使其随机有什么好处?,database,oracle,Database,Oracle,假设我有一个包含N行的表,但没有可用作主键的现有列 我想生成一个(为了方便和完整) 我有几个选择来做这件事 我可以使用GUID 我可以使用一个序列并为每个序列生成一个整数(例如,填充1到N) 我可以生成一个随机整数 (还有更多) 我知道guid有它们的优点和缺点 与顺序整数相比,使用随机生成的整数是否有一些优势 索引列上的任何CRUD操作都不应受到影响。如果你正在进行批量加载,我会暂时关闭索引,然后再恢复它 我看不出原因,但我遇到了这样一种情况(在本例中是Oracle),有人这样做了,我希望这不

假设我有一个包含
N
行的表,但没有可用作主键的现有列

我想生成一个(为了方便和完整)

我有几个选择来做这件事

  • 我可以使用GUID
  • 我可以使用一个序列并为每个序列生成一个整数(例如,填充1到N)
  • 我可以生成一个随机整数
  • (还有更多)
  • 我知道guid有它们的优点和缺点

    与顺序整数相比,使用随机生成的整数是否有一些优势

    索引列上的任何CRUD操作都不应受到影响。如果你正在进行批量加载,我会暂时关闭索引,然后再恢复它


    我看不出原因,但我遇到了这样一种情况(在本例中是Oracle),有人这样做了,我希望这不仅仅是“什么是
    序列”
    ?”

    因为您看到了选择这种方法的特定实现,我们只能推测原始开发人员可能在想什么。那总是会出错的

    我的猜测是,最初的开发人员试图避免这样一个问题,即序列生成键上索引中最右边的块变成了阻止尝试执行插入的许多不同会话的资源。出现“热块”问题是因为执行
    插入操作的每个会话都需要修改最右侧块中的数据(假定为连续键),因此Oracle需要序列化访问。在大多数系统中,这并不是什么大问题——所需的序列化量很小,而且大多数系统没有足够的同步
    insert
    操作来解决这一有意义的问题。但是,如果您的系统容量非常大,特别是在RAC集群上运行时,这些等待事件可能是有意义的。如果您有这种问题,生成一个随机键将通过使不同会话(通常)写入索引中的不同块来消除它


    当然,即使您发现自己经常在索引的最右边块上等待,生成随机键也不是推荐的方法。Oracle提供反向键索引,通过反向索引数据来解决热块问题,反向索引将I/O分布在索引中的块上。如果您获得使用分区选项的许可,那么哈希分区索引会更好。对于更详细的讨论,这里有一个指向相关SO问题的链接。

    由于您看到了选择这种方法的特定实现,我们只能推测原始开发人员可能在想什么。那总是会出错的

    我的猜测是,最初的开发人员试图避免这样一个问题,即序列生成键上索引中最右边的块变成了阻止尝试执行插入的许多不同会话的资源。出现“热块”问题是因为执行
    插入操作的每个会话都需要修改最右侧块中的数据(假定为连续键),因此Oracle需要序列化访问。在大多数系统中,这并不是什么大问题——所需的序列化量很小,而且大多数系统没有足够的同步
    insert
    操作来解决这一有意义的问题。但是,如果您的系统容量非常大,特别是在RAC集群上运行时,这些等待事件可能是有意义的。如果您有这种问题,生成一个随机键将通过使不同会话(通常)写入索引中的不同块来消除它


    当然,即使您发现自己经常在索引的最右边块上等待,生成随机键也不是推荐的方法。Oracle提供反向键索引,通过反向索引数据来解决热块问题,反向索引将I/O分布在索引中的块上。如果您获得使用分区选项的许可,那么哈希分区索引会更好。对于更详细的讨论,这里有一个指向相关SO问题的链接。

    由于您看到了选择这种方法的特定实现,我们只能推测原始开发人员可能在想什么。那总是会出错的

    我的猜测是,最初的开发人员试图避免这样一个问题,即序列生成键上索引中最右边的块变成了阻止尝试执行插入的许多不同会话的资源。出现“热块”问题是因为执行
    插入操作的每个会话都需要修改最右侧块中的数据(假定为连续键),因此Oracle需要序列化访问。在大多数系统中,这并不是什么大问题——所需的序列化量很小,而且大多数系统没有足够的同步
    insert
    操作来解决这一有意义的问题。但是,如果您的系统容量非常大,特别是在RAC集群上运行时,这些等待事件可能是有意义的。如果您有这种问题,生成一个随机键将通过使不同会话(通常)写入索引中的不同块来消除它


    当然,即使您发现自己经常在索引的最右边块上等待,生成随机键也不是推荐的方法。Oracle提供反向键索引,通过反向索引数据来解决热块问题,反向索引将I/O分布在索引中的块上。如果您获得使用分区选项的许可,那么哈希分区索引会更好。对于更详细的讨论,这里有一个指向相关SO问题的链接。

    由于您看到了选择此方法的特定实现,我们只能推测原始开发人员可能是什么