J'ai une requête super simple dans un schéma en étoile. Un fait, deux dimensions. J'ai vérifié que je fais les jointures correctement. Mais lorsque j'exécute le plan de requête, j'obtiens une fusion cartésienne de fusion juste avant les étapes pour ajouter les dimensions. Si je change de rechercher par l'ID de dimension au lieu du code, mon plan est bien - pas cartésien.ce qui pourrait provoquer une fusion cartésienne jointe
explain plan for
select * from fact f
inner join dim1 d1
on d1.id = f.d1_id
inner join dim2 d2
on d2.id = f.d2_id
where d1.id= '1' and d2.id = '2';
Des idées qui pourraient causer le cartésien?
EDIT: Je viens de créer les tables et les index aujourd'hui. Je vais vérifier que j'ai fait des «statistiques de calcul» sur eux pour être sûr que tout est à jour.
plus d'informations sur les tables maintenant que je les ai édités et se sont débarrassés de la cartésienne:
Table de fait:
index bitmap sur dim1.id
index bitmap sur dim2.id
(et beaucoup d'autres indices de bitmap)
Dim1
index unique sur l'ID
index bitmap sur le code - ceci est nouveau, mais il n'a pas semblé changer le plan de requête any.
Dim2
index unique sur id
d'index unique sur le code --Quand j'ai ajouté cela, le cartésienne est parti.
Ma table de faits a 50 millions d'enregistrements, dim1 a 44 enregistrements et dim2 a 6 enregistrements. Je n'avais donc pas d'index sur des tables aussi courtes. Mais l'ajout de l'index unique à dim2 est ce qui s'est débarrassé de la jointure cartésienne et a fait passer l'estimation du temps du plan de requête de 5 minutes à quelques secondes.
merci!J'ai été incapable de rendre le dim1.code unique, mais j'ai réussi à rendre dim2.code unique. Cela l'a réparé. merci pour l'idée! Mais il semble que cela pourrait me causer des problèmes finalement. Pas tous mes dims ont quelque chose d'unique, sauf l'ID. – user158017