告诉我如何正确确定主键,以应对需要最快插入的情况。唯一行标识符表示如下:'ID:domain.local-46424-1507204866234-1:1:187331:1:1'。插入算法本身以如下形式呈现: 1. 搜索base中是否已经存在具有指定标识符的行(该行的select语句) 2. 如果该行不存在,则进行插入
建议组织表格的最佳方式:
- 将像 'ID:domain.local-46424-1507204866234-1:1:187331:1:1' 这样的字符串作为主键。我想这不是最快的方法。
- 将主键设为数字自增。添加一个数字列作为字符串的 hashCode,在其上创建索引并在其上进行搜索。实现在应用程序级别检查字符串标识符以防 hashCode 冲突的逻辑
- 从 hashCode(str_id) 和 str_id 列中创建一个复合主键。在这种情况下,冲突检查将在数据库级别进行。考虑到在这两个主键列上创建索引,问题是它会有多昂贵。
- 也许有更简单的方法?
在这里进行了有趣的测试-阅读
SEQUENCE- 可能是最快的选择,但产生更多的 REDO,与SYS_GUID()一般来说,无论如何,如果您没有自然候选人,我会在这两个选项之间进行选择 - 即 包含数据的故意唯一列(不是人为的,如
SEQUENCEorSYS_GUID())决定听从迈克的建议。
总而言之,决定使用以下选项作为解决方案:将主键设为数字自动增量。添加一个数字列作为字符串的 hashCode,在其上创建索引并在其上进行搜索。为 hashCode 冲突的 WHERE 子句添加字符串 ID 检查逻辑:
SELECT * FROM TABLE WHERE hashCode=XX and Code=YY感谢所有参与者的帮助,感谢 MaxU 提供的有用信息!:)