问题描述
你好,
如果我只对uud进行相等的比较,索引uud的最佳方法是什么?
我gess哈希索引更好,但我不确定。
问候
斯特凡·吉纳
如果我只对uud进行相等的比较,索引uud的最佳方法是什么?
我gess哈希索引更好,但我不确定。
问候
斯特凡·吉纳
专家解答
“最佳” 总是主观的。为了帮助您找到最适合您的 “最佳”,我们需要一些可以衡量的客观标准。
在大多数情况下,常规的唯一B树索引可以解决问题。如果你已经将UUID定义为主键或唯一键,你已经有一个!
当涉及到哈希索引时,您可能会想到不同的RDBMS。Oracle数据库中没有!
...
好吧,好吧,18c引入了记忆优化的行数。它基于memoptimized池中的主键构建哈希索引。
https://docs.oracle.com/en/database/oracle/oracle-database/18/tgdba/tuning-system-global-area.html#GUID-9752E93D-55A7-4584-B09B-9623B33B5CCF
但这需要18c。和Exadata。所以我怀疑你是否有能力使用它!
还有另一个基于哈希的数据结构已经存在了一段时间:
(单表) 哈希簇。
但是这些都有一些警告。例如,为了减少哈希冲突的机会 (从而确保快速查询),您需要能够对表将存储的最大行数做出合理的猜测。这对于许多表来说是不可行的。
但是,如果可以的话,它们使数据库能够使用哈希查找行:
在以下位置阅读有关此的更多信息:
https://docs.oracle.com/en/database/oracle/oracle-database/18/admin/managing-hash-clusters.html
在大多数情况下,常规的唯一B树索引可以解决问题。如果你已经将UUID定义为主键或唯一键,你已经有一个!
create table t ( uuid raw(16) not null constraint pk primary key ); select index_name, uniqueness, index_type from user_indexes where table_name = 'T'; INDEX_NAME UNIQUENESS INDEX_TYPE PK UNIQUE NORMAL复制
当涉及到哈希索引时,您可能会想到不同的RDBMS。Oracle数据库中没有!
...
好吧,好吧,18c引入了记忆优化的行数。它基于memoptimized池中的主键构建哈希索引。
https://docs.oracle.com/en/database/oracle/oracle-database/18/tgdba/tuning-system-global-area.html#GUID-9752E93D-55A7-4584-B09B-9623B33B5CCF
但这需要18c。和Exadata。所以我怀疑你是否有能力使用它!
还有另一个基于哈希的数据结构已经存在了一段时间:
(单表) 哈希簇。
但是这些都有一些警告。例如,为了减少哈希冲突的机会 (从而确保快速查询),您需要能够对表将存储的最大行数做出合理的猜测。这对于许多表来说是不可行的。
但是,如果可以的话,它们使数据库能够使用哈希查找行:
create cluster single_table_hash ( uuid raw(16) ) single table hashkeys 10000; -- expect at most 10,000 rows in the table drop table t cascade constraints purge; create table t ( uuid raw(16) not null constraint pk primary key ) cluster single_table_hash ( uuid ) ; set serveroutput off var v varchar2(16); select * from t where uuid = hextoraw(:v); select * from table(dbms_xplan.display_cursor); PLAN_TABLE_OUTPUT SQL_ID favx4nmam2n8u, child number 0 ------------------------------------- select * from t where uuid = hextoraw(:v) Plan hash value: 671594591 ---------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | ---------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 | |* 1 | TABLE ACCESS HASH| T | 8174 | 81740 | | ---------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("UUID"=HEXTORAW(:V))复制
在以下位置阅读有关此的更多信息:
https://docs.oracle.com/en/database/oracle/oracle-database/18/admin/managing-hash-clusters.html
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
552次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
511次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
419次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
415次阅读
2025-04-01 15:56:03
Oracle SQL 执行计划分析与优化指南
Digital Observer
411次阅读
2025-04-01 11:08:44
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
410次阅读
2025-04-18 14:18:38
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
370次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
356次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
332次阅读
2025-04-17 17:02:24
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
322次阅读
2025-04-15 14:48:05