暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 哈希扫描

原创 Asher.HU 2021-02-04
631

8.5.2哈希扫描

散列簇是像索引簇,除了索引关键字被替换的哈希函数。没有单独的群集索引。

在哈希群集中,数据索引。数据库使用哈希扫描根据哈希值在哈希集群中定位行。


8.5.2.1当优化器考虑哈希扫描时

当查询访问哈希群集中的表时,数据库将考虑哈希扫描。


8.5.2.2哈希扫描如何工作

在哈希集群中,具有相同哈希值的所有行都存储在同一数据块中。

为了执行集群的哈希扫描,Oracle数据库首先通过将哈希函数应用于语句指定的集群键值来获取哈希值。然后,Oracle数据库将扫描包含具有此哈希值的行的数据块。


8.5.2.3哈希扫描:示例

本示例employeesdepartments表进行哈希处理department_id,然后在集群中查询单个部门。

您可以如下创建哈希集群和集群中的表:

CREATE CLUSTER employees_departments_cluster
   (department_id NUMBER(4)) SIZE 8192 HASHKEYS 100;
 
CREATE TABLE employees2
   CLUSTER employees_departments_cluster (department_id) 
   AS SELECT * FROM employees;
 
CREATE TABLE departments2 
   CLUSTER employees_departments_cluster (department_id) 
   AS SELECT * FROM departments;
复制

您可以30按以下方式查询部门中的员工

SELECT *
FROM   employees2
WHERE  department_id = 30
复制

为了执行哈希扫描,Oracle数据库首先通过将哈希函数应用于键值来获取哈希值30,然后使用该哈希值扫描数据块并检索行(步骤1)。

SQL_ID  919x7hyyxr6p4, child number 0
-------------------------------------
SELECT * FROM employees2 WHERE department_id = 30

Plan hash value: 2399378016

----------------------------------------------------------------
| Id  | Operation         | Name       | Rows  | Bytes | Cost  |
----------------------------------------------------------------
|   0 | SELECT STATEMENT  |            |       |       |     1 |
|*  1 |  TABLE ACCESS HASH| EMPLOYEES2 |    10 |  1330 |       |
----------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("DEPARTMENT_ID"=30)
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 8.5.2哈希扫描
    • 8.5.2.1当优化器考虑哈希扫描时
    • 8.5.2.2哈希扫描如何工作
    • 8.5.2.3哈希扫描:示例