Requête sur la Vue est en cours d'exécution plus lente que la requête directe dans Oracle

J'ai essayé de créer de l'affichage avec les paramètres pour obtenir les données de façon dynamique.
(Je ne peux utiliser que si la condition que l'instruction select lui-même des modifications sur la base de paramètres)

Pour cela, j'ai écrit une procédure qui me renvoie les données nécessaires comme oracle type d'objet.

FUNCTION get_data(p_pk_id  NUMBER, p_tab_type VARCHAR2)
RETURN M_TYPE_DATA_TAB
AS
v_table_collection M_TYPE_DATA_TAB;
BEGIN

-- my sql query which will change based on the params

RETURN v_table_collection;
END;

et j'ai exécuté la requête select comme suit.

SELECT * FROM TABLE(get_data(12345, 'MYTAB'));

qui me donne des données dans moins de 1 sec.

pour la même instruction select, j'ai créé une vue comme

CREATE OR REPLACE VIEW my_view
AS SELECT * FROM TABLE(get_data(12345, 'MYTAB'));

si j'ai une requête à la vue

SELECT * FROM my_view

il faut plus de 6 sec pour obtenir les mêmes données.

Aucune idée pourquoi il y a que beaucoup grande différence à la requête des mêmes données.
Sera la vue de prendre plus de temps que la normale requête?

Entièrement reproductible cas de test aiderait énormément ici. En général, simplement en ajoutant un select * from sur le haut de quelque chose n'a pas d'importance. Nous avons besoin de savoir exactement ce que c'est qui rend votre cas particulier.
comme Gontran Blohm dit, quand j'ai une requête à partir de la vue c'est l'exécution complète de la table d'analyse où la requête directe à l'aide de tous les index de la table de base pour obtenir les données plus rapidement.
C'est utile, mais nous n'avons toujours pas obtenu à la racine du problème. Je voudrais savoir pourquoi il utilise un FTS au lieu d'un index.

OriginalL'auteur Madhusudhan Dollu | 2013-12-12