ホームページ データベース mysql チュートリアル Oracle 11g Release (11.1) 索引底层的数据结构

Oracle 11g Release (11.1) 索引底层的数据结构

Jun 07, 2016 pm 05:55 PM
oracle release

本文介绍关于 Oracle 索引的结构。大概了解 Oracle 索引底层的数据结构,从而更好地理解 Oracle 索引对增、删、改、查的性能

本文内容 B-树(B-tree) 散列(Hash) k-d 树(k-d tree) 点四叉树(Point Quadtree)

本文介绍关于 Oracle 索引的结构。大概了解 Oracle 索引底层的数据结构,从而更好地理解 Oracle 索引对增、删、改、查的性能。

B-树(B-tree)

非索引的结构能满足所有需要,但自平衡的 B-树索引结构更能优化在大数据集上检索的性能。每个 B-树节点拥有多个键和指针。特定 B-树支持的一个节点中键的最大数量是那颗树的顺序。每个节点都具有一个潜在的 order+1 指针,指向比它更低一级的节点。

例如,如图 1 所示,order=2 的 B-树具有三个指针,分别指向:比它第一个键小的子节点(最左边的指针);比它第一个键大,比第二个键小的子节点(中间的指针);比它第二个键大的子节点(最右边的指针)。因此,B-树算法,最大限度地减少定位记录所需的读写,通过传递比二叉树算法更少的节点,二叉树对每个确定的节点,用一个键和最多两个子节点(二叉树的结构是一个键值,左右两个指针,B-树是二叉树的扩展)。下图描述的是克努特变换(Knuth variation),它的索引由两部分组成:一个顺序集(Sequence set),提供快速顺序的访问数据;一个索引集(Index set),提供直接访问顺序集。

虽然,B-树的节点,一般不包含相同数量的数据值,并且他们通常包含一定量的未使用空间,B-树算法确保树保持平衡,和叶节点在同一级上。

图 1 B-树

散列(Hash)

散列根据一个给定字段值快速直接地访问一个特定的已存储的记录。每个记录被放置的位置是根据同一个函数,记录的一些字段域的函数计算的。并用相同的函数插入和更新。

散列的问题是记录的物理顺序与它们的逻辑顺序没有任何关系。另外,散列会在磁盘上存在大量未使用的区域。

图 2 散列

k-d 树(k-d tree)

具有两维的数据,例如经度和纬度,可用通过使用 k-d树变换,称为 2-d 树,被有效地存储和检索。

在这个结构,每个节点的数据类型,是字段信息,两个坐标,和指向两个子节点的左指针和右指针。

图 3 2-d 树

这种结构利于范围查询。也就是说,如果用户指定一个点(xx, xx)和一个距离,那么,查询会返回在这个指定的原来点距离内的所有点集合。

2-d 树很容易实现。但是因为,一个包含 k 个节点的 2-d 树具有 k 高度,因此,插入和查询复杂。

点四叉树(Point Quadtree)

点四叉树,在图 4 所示,也用来表示在一个两维空间中的点数据,但这些结构把区域划分为四个部分,而 2-d 树划分为两个。节点记录类型的字段由属性信息组成,包括两个坐标和指向四个子节点的方位点,按顺时针,如西北NW,西南SW,东北NE,东南SE。

图 4 Point Quadtree 索引结构

点四叉树跟 2-d 树一样也很容易实现。一个包含 k 个节点的四叉树具有 k 高度,插入和查询复杂。每个比较都要求在至少两个坐标上进行。然而,实际中,从 root 到 leaf 的长度在点四叉树中往往较短。

复制上面第二个链接里边提供的 Python 代码,做适当修改。因为,网页提供的代码只能运行在较低版本 Python。Python 3 之后的版本跟之前的差异较大。因此,下载本文最后源代码,并在 Python 3.3 的 IDLE 运行。会得到如下输出:

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64  (AMD64)]  win32
ログイン後にコピー
Type "copyright", "credits"  "license()"  more information.
ログイン後にコピー
>>> ================================ RESTART ================================
ログイン後にコピー
>>> 
ログイン後にコピー
<?xml version="1.0" encoding="iso-8859-1"?>
ログイン後にコピー
-
ログイン後にコピー
 "http:
ログイン後にコピー
<svg xmlns="http:
ログイン後にコピー
 <line x1="1" y1="1" x2="1" y2="399"></line>
ログイン後にコピー
 <line x1="1" y1="399" x2="399" y2="399"></line>
ログイン後にコピー
 <line x1="399" y1="399" x2="399" y2="1"></line>
ログイン後にコピー
 <line x1="399" y1="1" x2="1" y2="1"></line>
ログイン後にコピー
 <line x1="200" y1="1" x2="200" y2="399"></line>
ログイン後にコピー
 <line x1="1" y1="200" x2="399" y2="200"></line>
ログイン後にコピー
 <line x1="100" y1="1" x2="100" y2="200"></line>
ログイン後にコピー
 <line x1="1" y1="100" x2="200" y2="100"></line>
ログイン後にコピー
 <line x1="50" y1="1" x2="50" y2="100"></line>
ログイン後にコピー
……
ログイン後にコピー

复制输出的结果,命名为 .svg,.html 也行,用浏览器打开,会呈现下图:

图 5 一个 8*8 大小的点四叉树区域

看这个图,从左上角开始,顺时针。你可以当做“根据需要,是否要点,不断按 4 个分裂其中一个方块”。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle データベースのログはどのくらいの期間保存されますか? Oracle データベースのログはどのくらいの期間保存されますか? May 10, 2024 am 03:27 AM

Oracle データベース ログの保存期間は、次のようなログのタイプと構成によって異なります。 REDO ログ: 「LOG_ARCHIVE_DEST」パラメータで構成された最大サイズによって決定されます。アーカイブ REDO ログ: 「DB_RECOVERY_FILE_DEST_SIZE」パラメータで構成された最大サイズによって決まります。オンライン REDO ログ: アーカイブされず、データベースの再起動時に失われます。保持期間はインスタンスの実行時間と一致します。監査ログ: 「AUDIT_TRAIL」パラメータによって構成され、デフォルトで 30 日間保持されます。

Oracle データベースの起動手順の順序は次のとおりです。 Oracle データベースの起動手順の順序は次のとおりです。 May 10, 2024 am 01:48 AM

Oracle データベースの起動シーケンスは次のとおりです。 1. 前提条件を確認します。 3. データベース インスタンスを起動します。 5. データベースに接続します。サービスを有効にします (必要な場合)。 8. 接続をテストします。

Remote 3 ユニバーサル リモコンにはタッチスクリーンが付属していますが、サブスクリプションやサーバーの義務はありません Remote 3 ユニバーサル リモコンにはタッチスクリーンが付属していますが、サブスクリプションやサーバーの義務はありません Jun 14, 2024 am 09:13 AM

Logitech の人気の Harmony リモコンの終焉以来、高品質ユニバーサル リモコンの市場はせいぜい断片化しています。Unfolded Circle は、サーバーの義務やサブスクを排除することで Harmony Ultimate の運命を回避することを目指しています。

Oracle にはどれくらいのメモリが必要ですか? Oracle にはどれくらいのメモリが必要ですか? May 10, 2024 am 04:12 AM

Oracle が必要とするメモリーの量は、データベースのサイズ、アクティビティー・レベル、および必要なパフォーマンス・レベル (データ・バッファー、索引バッファーの保管、SQL ステートメントの実行、およびデータ・ディクショナリー・キャッシュの管理) によって異なります。正確な量は、データベースのサイズ、アクティビティ レベル、および必要なパフォーマンス レベルによって影響されます。ベスト プラクティスには、適切な SGA サイズの設定、SGA コンポーネントのサイズ設定、AMM の使用、メモリ使用量の監視などが含まれます。

Oracle で特定の文字の出現数を確認する方法 Oracle で特定の文字の出現数を確認する方法 May 09, 2024 pm 09:33 PM

Oracle で文字の出現数を確認するには、次の手順を実行します。 文字列の全長を取得します。 文字が出現する部分文字列の長さを取得します。 部分文字列の長さを減算して、文字の出現数をカウントします。全長から。

Oracle データベース サーバーのハードウェア構成要件 Oracle データベース サーバーのハードウェア構成要件 May 10, 2024 am 04:00 AM

Oracle データベース サーバーのハードウェア構成要件: プロセッサ: マルチコア、少なくとも 2.5 GHz のメイン周波数 大規模なデータベースの場合は、32 コア以上が推奨されます。メモリ: 小規模データベースの場合は少なくとも 8 GB、中規模のデータベースの場合は 16 ~ 64 GB、大規模なデータベースまたは重いワークロードの場合は最大 512 GB 以上。ストレージ: SSD または NVMe ディスク、冗長性とパフォーマンスのための RAID アレイ。ネットワーク: 高速ネットワーク (10GbE 以上)、専用ネットワーク カード、低遅延ネットワーク。その他: 安定した電源、冗長コンポーネント、互換性のあるオペレーティング システムとソフトウェア、放熱と冷却システム。

Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 May 10, 2024 am 03:03 AM

Oracle で 1 日に 1 回実行されるスケジュールされたタスクを作成するには、次の 3 つの手順を実行する必要があります。 ジョブを作成します。ジョブにサブジョブを追加し、そのスケジュール式を「INTERVAL 1 DAY」に設定します。ジョブを有効にします。

Oracle データベースを使用するために必要なメモリの量 Oracle データベースを使用するために必要なメモリの量 May 10, 2024 am 03:42 AM

Oracle データベースに必要なメモリの量は、データベースのサイズ、ワークロードの種類、同時ユーザーの数によって異なります。一般的な推奨事項: 小規模データベース: 16 ~ 32 GB、中規模データベース: 32 ~ 64 GB、大規模データベース: 64 GB 以上。考慮すべきその他の要素には、データベースのバージョン、メモリ最適化オプション、仮想化、ベスト プラクティス (メモリ使用量の監視、割り当ての調整) などがあります。

See all articles