内部機能とは?
4684 ワード
翻訳と注釈:https://programmer.help/blogs/5defa81238b5c.html
SQLを練習するために、実行計画を分析しました.
PREDICATE INFROMATIONセクションにはINTERNAL FUNCTION()という関数が表示されていますが、好奇心から検索と説明のページを作成します.
インターネット検索の結果、INTERNAL PUNCTIONは主にORACLE内部の暗黙的な変換で発生していることが明らかになった.また、実際に私が書いたSQLでは、暗黙的な変換を行うために生じた感じの中にINTERNAL PUNCTIONが見えます.
参考になったブログの著者は、暗示的な変換だけに基づいて現れるわけではないと話しています.
Oracleの公式文書には、暗黙的なデータ型変換の実行に役立つINTERNAL PUNCTIONの特殊な機能が記載されています.
(*現在PAGE NOT FOUNDが出ています.)
https://docs.ORACLE.com/cd/e11882-u01/server.112/e25523/part-uavail.htm-sthref141
実際、ORACLEの内部にはINTERNALという関数が見つかりません.また、V$sqlfn「metadata.conf」ではinternalという名前のオブジェクトが見つかりません.
実行計画は、2つの異なるデータ型を比較するために、oracleがフィールドAで暗黙的なデータ変換を強制することを示します.
Oracleでは、WHERE A=bがWHERE TO DATE(a)=Bに暗黙的に変換されます.これもINTERNAL FUNCTIONが実行計画に登場する理由です.実際のバイナリ実行計画で読み取り可能な実行コード計画を生成すると、内部演算コードを分かりやすい機能名に変換できないため、デフォルトでは表示ではなく「内部」文字列が使用されます.
上のSQL構文では、WHEREセクションのowner="SYS"OR owner="SYSTEM"セクションには、PREDICATEにINTERNAL FUNCTIONは表示されません.
ただしowner="SYS"OR owner="SYSTEM"OR
WHEREセクションをobject id=123に変更するとINTERNAL PUNTIONが表示されます.OWNERをINTERNAL FUNCTIONに置き換えました.
INに変更すると、OWNERの代わりにINTERNAL FUNCTIONが使用されます.
(*これは、INがor拡張によってorに変更され、変更されたsql文がorを内部関数に変更された可能性があります)
DBMS XPLAN CURSORは、単一の実行計画フェーズに適用される「複雑」複合述語を記述できません.複数の異なるカラムが含まれており、少なくとも1つの値(リストやed述語など)をチェックする必要があります.
(*この後の内容は少し知識が足りないので訳しにくいですが、DBMS XPLANで実行計画を分析しているときにもINTERNAL FUNCTIONがいくつか出てきます.また実行計画についての不満もありますので、ブログを参考に確認したほうがいいです.)
EXPLAIN PLAN FOR構文は一部であるが,複雑なPREDICATEを説明できる.EXPLAIN PLANは、特定のSQL文をより特殊かつツール的に分析する際に、より多くの情報(より多くのメモリも使用されている)を持っていることが明らかになりました.それとも誰がV$SQLを作成しましたか?より複雑な述語を分析するためにコードを記述および記述していません.以下に示します.
INTERNAL PUNCTIONは表示されず、すべてのPREDICATEが正しく表示されます.したがって、正しい実行計画を決定するために、EXPLAIN PLAN FORを使用することをお勧めします.
(*残念ながら、私の場合はINTERNAL FUNCTIONは存続しています.)
サマリ
INTERNAL PUNCTIONは、暗黙的な変換と複雑なPREDICATEの代わりに使用される.
SQLを練習するために、実行計画を分析しました.
select to_char(m.날짜,'yyyyMMdd'), max(주문금액)
from 주문 j, 월별테이블 m
where to_char(j.주문일자,'yyyyMMdd') = to_char(m.날짜,'yyyyMMdd')
group by to_char(m.날짜,'yyyyMMdd')
order by to_char(m.날짜,'yyyyMMdd');
PREDICATE INFROMATIONセクションにはINTERNAL FUNCTION()という関数が表示されていますが、好奇心から検索と説明のページを作成します.
INTERNAL FUNCTIONとは?
インターネット検索の結果、INTERNAL PUNCTIONは主にORACLE内部の暗黙的な変換で発生していることが明らかになった.また、実際に私が書いたSQLでは、暗黙的な変換を行うために生じた感じの中にINTERNAL PUNCTIONが見えます.
参考になったブログの著者は、暗示的な変換だけに基づいて現れるわけではないと話しています.
Oracleの公式文書には、暗黙的なデータ型変換の実行に役立つINTERNAL PUNCTIONの特殊な機能が記載されています.
(*現在PAGE NOT FOUNDが出ています.)
https://docs.ORACLE.com/cd/e11882-u01/server.112/e25523/part-uavail.htm-sthref141
実際、ORACLEの内部にはINTERNALという関数が見つかりません.また、V$sqlfn「metadata.conf」ではinternalという名前のオブジェクトが見つかりません.
機能暗黙的なデータ変換!
SQL> CREATE TABLE t(a VARCHAR2(20), b DATE);
Table created.
SQL> INSERT INTO t VALUES( TO_CHAR(sysdate), sysdate) ;
1 row created.
SQL> commit;
Commit complete.
実行計画は、2つの異なるデータ型を比較するために、oracleがフィールドAで暗黙的なデータ変換を強制することを示します.
Oracleでは、WHERE A=bがWHERE TO DATE(a)=Bに暗黙的に変換されます.これもINTERNAL FUNCTIONが実行計画に登場する理由です.実際のバイナリ実行計画で読み取り可能な実行コード計画を生成すると、内部演算コードを分かりやすい機能名に変換できないため、デフォルトでは表示ではなく「内部」文字列が使用されます.
機能グループ化しにくい複雑な式
上のSQL構文では、WHEREセクションのowner="SYS"OR owner="SYSTEM"セクションには、PREDICATEにINTERNAL FUNCTIONは表示されません.
ただしowner="SYS"OR owner="SYSTEM"OR
WHEREセクションをobject id=123に変更するとINTERNAL PUNTIONが表示されます.OWNERをINTERNAL FUNCTIONに置き換えました.
INに変更すると、OWNERの代わりにINTERNAL FUNCTIONが使用されます.
(*これは、INがor拡張によってorに変更され、変更されたsql文がorを内部関数に変更された可能性があります)
DBMS XPLAN CURSORは、単一の実行計画フェーズに適用される「複雑」複合述語を記述できません.複数の異なるカラムが含まれており、少なくとも1つの値(リストやed述語など)をチェックする必要があります.
(*この後の内容は少し知識が足りないので訳しにくいですが、DBMS XPLANで実行計画を分析しているときにもINTERNAL FUNCTIONがいくつか出てきます.また実行計画についての不満もありますので、ブログを参考に確認したほうがいいです.)
INTERNAL PUNCTIONを表示しない方法
EXPLAIN PLAN FOR構文は一部であるが,複雑なPREDICATEを説明できる.EXPLAIN PLANは、特定のSQL文をより特殊かつツール的に分析する際に、より多くの情報(より多くのメモリも使用されている)を持っていることが明らかになりました.それとも誰がV$SQLを作成しましたか?より複雑な述語を分析するためにコードを記述および記述していません.以下に示します.
INTERNAL PUNCTIONは表示されず、すべてのPREDICATEが正しく表示されます.したがって、正しい実行計画を決定するために、EXPLAIN PLAN FORを使用することをお勧めします.
(*残念ながら、私の場合はINTERNAL FUNCTIONは存続しています.)
サマリ
INTERNAL PUNCTIONは、暗黙的な変換と複雑なPREDICATEの代わりに使用される.
Reference
この問題について(内部機能とは?), 我々は、より多くの情報をここで見つけました https://velog.io/@haman92/오라클-Internal-Function이란テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol