使用Oracle函数索引简单介绍(一般)
如果一个函数(function)或表达式(expression)使用了一个表的一列或多 列,则用户可以依据这些函数或表达式为表建立索引,这样的索引被称为函 数索引(Function-Based Index)。函数索引能够计算出函数或表达式的, 并将其保存在索引中。用户创建的函数索
如果一个函数(function)或表达式(expression)使用了一个表的一列或多
列,则用户可以依据这些函数或表达式为表建立索引,这样的索引被称为函
数索引(Function-Based Index)。函数索引能够计算出函数或表达式的值,
并将其保存在索引中。用户创建的函数索引既可以是平衡树类型(B-tree
index)的,也可以是位图类型(bitmap index)的。
用于创建索引的函数可以是一个数学表达式(arithmetic expression),也可以
是使用了 PL/SQL 函数(PL/SQL function),包函数(package function),C
外部调用(C callout),或 SQL 函数(SQL function)的表达式。用于创建索
引的函数不能包含任何聚合函数(ggregate function),如果为用户自定义函
数,则在声明中必须使用 DETERMINISTIC 关键字。例如,
- create or replace function f_david(p_value varchar2) return varchar2
- deterministic is
- begin
- return p_value;
- end;
如果在一个使用对象类型(object type)的列上建立函数索引,则可以使用此对象的方法(method)
作为函数,例如此对象的 map 方法。用户不能在数据类型为 LOB,REF,或嵌套表(nested table)的列上
建立函数索引,也不能在包含 LOB,REF,或嵌
套表等数据类型的对象类型列上建立函数索引。
使用函数索引
如果一个 SQL 语句的 WHERE 子句中使用了函数,那么建立相应的函数索引
(function-based index)是提高数据访问性能的有效机制。表达式
(expression)的结果经过计算后将被存储在索引中。但是当执行 INSERT 和
UPDATE 语句时,Oracle 需要进行函数运算以便维护索引。
例如,如果用户创建了以下函数索引:
CREATE INDEX idx ON table_1 (a + b * (c - 1), a, b);
当 Oracle 处理如下查询时就可以使用之前建立的索引:
SELECT a FROM table_1 WHERE a + b * (c - 1)
使用 UPPER(column_name) 或 LOWER(column_name) 函数建立函数索引
(function-based index)有助于与大小写无关(case-insensitive)的查询。例如
创建以下函数索引:
CREATE INDEX uppercase_idx ON employees (UPPER
(first_name));
有助于提高以下查询的性能:
SELECT * FROM employees WHERE UPPER(first_name) =
'RICHARD';
函数索引的依赖性
函数索引(function-based index)依赖于索引定义表达式中使用的函数。如果
此函数为 PL/SQL 函数(PL/SQL function)或包函数(package function),当
函数声明(function specification)发生变化时,索引将失效(disabled)。
用户需要被授予(grant)CREATE INDEX 或 CREATE ANY INDEX 权限才能
创建函数索引(function-based index)。
要想使用函数索引(function-based index):
● 建立索引后,表必须经过分析(analyze)。
● 必须保证查询的条件表达式不是 NULL 值, 因为 NULL 值不会被存储到
索引中。
以下各节将讲述使用函数索引的其他需求。
定义函数的权限
函数索引(function-based index)的所有者(owner)必须具备此索引定义中
使用的函数的 EXECUTE 权限。当 EXECUTE 权限被收回(revoke)后,
Oracle 则将索引标识为 DISABLED。索引的所有者无须具备此函数的
EXECUTE WITH GRANT OPTION 权限,即可将索引所在表的 SELECT 权限
授予(grant)其他用户。
解决函数索引的依赖性问题
函数索引(function-based index)依赖于她使用的所有函数。如果函数或函数
所在包的声明(specification)被修改过(或索引所有者对函数的 EXECUTE
权限被收回),将会出现以下情况:
● 索引被标记为 DISABLED。
● 如果优化器(optimizer)选择了在标记为 DISABLED 的索引上执行查
询,那么此查询将失败
● 使用标记为 DISABLED 的索引而执行的 DML 操作将失败,除非此索引
同时被标记为 UNUSABLE 且初始化参数(initialization parameter)
SKIP_UNUSABLE_INDEXES 被设为 TRUE。
函数被修改之后,用户可以使用 ALTER INDEX ... ENABLE 语句将索引重新置
为 ENABLE 状态。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Oracleのソリューションを開くことはできません。1。データベースサービスを開始します。 2。リスナーを開始します。 3.ポートの競合を確認します。 4.環境変数を正しく設定します。 5.ファイアウォールまたはウイルス対策ソフトウェアが接続をブロックしないことを確認してください。 6.サーバーが閉じているかどうかを確認します。 7. RMANを使用して破損したファイルを回復します。 8。TNSサービス名が正しいかどうかを確認します。 9.ネットワーク接続を確認します。 10。Oracleソフトウェアを再インストールします。

Oracleのすべてのデータを削除するには、次の手順が必要です。1。接続を確立します。 2。外部のキーの制約を無効にします。 3.テーブルデータを削除します。 4.トランザクションを送信します。 5.外部キーの制約を有効にします(オプション)。データの損失を防ぐために、実行前にデータベースを必ずバックアップしてください。

Oracle Cursorの閉鎖問題を解決する方法には、次のものが含まれます。 Scopeが終了した後に自動的に閉じるように、for update句のカーソルを宣言します。使用句のカーソルを宣言して、関連するPL/SQL変数が閉じられたときに自動的に閉じるようにします。例外処理を使用して、例外の状況でカーソルが閉じていることを確認します。接続プールを使用して、カーソルを自動的に閉じます。自動送信を無効にし、カーソルの閉鎖を遅延させます。

Oracle Database Pagingは、Rownum Pseudo-ColumnsまたはFetchステートメントを使用して実装しています。RownumPseudo-Columnsは、行番号ごとに結果をフィルタリングするために使用され、複雑なクエリに適しています。 Fetchステートメントは、指定された最初の行を取得するために使用され、単純なクエリに適しています。

Oracleでは、forループループは動的にカーソルを作成できます。手順は次のとおりです。1。カーソルタイプを定義します。 2。ループを作成します。 3.カーソルを動的に作成します。 4。カーソルを実行します。 5。カーソルを閉じます。例:カーソルをサイクルごとに作成して、上位10人の従業員の名前と給与を表示できます。

Oracleデータベースを停止するには、次の手順を実行します。1。データベースに接続します。 2。すぐにシャットダウンします。 3.シャットダウンは完全に中止します。

SQLステートメントは、Oracleの動的SQLを使用して、ランタイム入力に基づいて作成および実行できます。手順には、次のものが含まれます。動的に生成されたSQLステートメントを保存するための空の文字列変数を準備します。 executeを即座に使用するか、ステートメントを準備して、動的なSQLステートメントをコンパイルおよび実行します。バインド変数を使用して、ユーザー入力またはその他の動的値を動的SQLに渡します。実行するか、実行するか、動的SQLステートメントを実行します。

CENTOSシステムにHadoop分散ファイルシステム(HDFS)を構築するには、複数のステップが必要です。この記事では、簡単な構成ガイドを提供します。 1.初期段階でJDKをインストールする準備:すべてのノードにJavadevelopmentKit(JDK)をインストールすると、バージョンはHadoopと互換性がある必要があります。インストールパッケージは、Oracleの公式Webサイトからダウンロードできます。環境変数構成: /etc /プロファイルファイルを編集し、JavaおよびHadoop環境変数を設定して、システムがJDKとHadoopのインストールパスを見つけることができるようにします。 2。セキュリティ構成:SSHパスワードなしログインSSHキーを生成する:各ノードでSSH-KeyGenコマンドを使用する
