2017-12-18 4 views
0

Yii2 ALL_OBJECTSを使用してスキーマをスキャンし、USER_OBJECTSをスキャンするだけでなく、OWNER = "owner_name"でフィルタリングする理由は何ですか?Yii2スキーマはUSER_OBJECTSではなくALL_OBJECTSをスキャンしますか?

何らかの理由で、ALL_OBJECTSをスキャンするときに長い実行時間(45秒)がかかると、USER_OBJECTSに問い合せるときに約2秒かかります。 (本番環境)

SELECT 
    A.COLUMN_NAME, 
    A.DATA_TYPE, 
    A.DATA_PRECISION, 
    A.DATA_SCALE, 
    A.DATA_LENGTH, 
    A.NULLABLE, 
    A.DATA_DEFAULT, 
    COM.COMMENTS AS COLUMN_COMMENT 
FROM ALL_TAB_COLUMNS A 
    INNER JOIN ALL_OBJECTS B ON B.OWNER = A.OWNER AND LTRIM(B.OBJECT_NAME) = LTRIM(A.TABLE_NAME) 
    LEFT JOIN ALL_COL_COMMENTS COM ON (A.OWNER = COM.OWNER AND A.TABLE_NAME = COM.TABLE_NAME AND A.COLUMN_NAME = COM.COLUMN_NAME) 
WHERE 
    A.OWNER = 'owner_name' 
    AND B.OBJECT_TYPE IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW') 
    AND B.OBJECT_NAME = 'object_name' 
ORDER BY A.COLUMN_ID 

おかげ

答えて

0

ALL_*ビュー/同義語とUSER_*ビュー/同義語にアクセスするには違いがあります。

ALL_OBJECTSは現在の使用でアクセス可能なすべてのオブジェクトを表し、USER_OBJECTSは現在のユーザーに属するオブジェクトのみを示します。

+0

しかし、特定のユーザーとしてUSER_ *にアクセスしていないのはなぜですか?私は具体的にはデータベースとOracleに関してはそれほど熱心ではなく、このフレームワークのロジックの背後にある理由を理解しようとしています。 – Dunams

関連する問題