带有 ML tables 的 Oracle 视图我希望优化器仅使用一个 ML table

Oracle view with ML tables I want optimizer to use one ML table only

甲骨文 11g。我有 ML(多语言)child tables 用于文本,一个 child table 每个 parent/language。因此,对于 parent table 产品,我有 PRODUCT_EN、PRODUCT_FR 等。我想要一个包含所有 ML table 的单一视图。当我查询特定语言时,我希望 Oracle 优化器(加入消除?)足够智能,只访问所需的 ML table。所以如果我指定 lan_id (language id) = 5 (French) 它应该忽略英语和其他翻译 tables。 这里有几个 return 正确数据的视图,但从计划中我看到针对法语的查询仍然访问英语:

CREATE OR REPLACE VIEW myproduct_ml AS
SELECT p.PROD_ID, STATUS, 
       ml.lan_id, ml.prod_name
FROM myproduct p JOIN
(SELECT en.* FROM myproduct_en en WHERE lan_id = 1
 UNION ALL
 SELECT fr.* FROM myproduct_fr fr WHERE lan_id = 5) ml
 ON (p.prod_id = ml.prod_id);

 CREATE OR REPLACE VIEW myproduct_ml AS
SELECT p.PROD_ID, STATUS, 
       ml.lan_id, ml.prod_name
FROM myproduct p JOIN myproduct_en ml ON (p.prod_id = ml.prod_id) WHERE lan_id = 1
 UNION ALL
SELECT p.PROD_ID, STATUS, 
       ml.lan_id, ml.prod_name
FROM myproduct p JOIN myproduct_fr ml ON (p.prod_id = ml.prod_id) WHERE lan_id = 5;

 select * from myproduct_ml WHERE lan_id = 5 ;

lan_id 不需要在 ML table 中,因为后缀指定了语言。

为什么每种语言都有单独的 table?这意味着每次引入新语言时都必须添加 table 并且必须更改所有查询。那一定不是。添加的数据应该只导致添加行,以便查询继续工作。

所以改用这一种语言 table 就大功告成了。