内部機能とは?


翻訳と注釈:https://programmer.help/blogs/5defa81238b5c.html
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の代わりに使用される.