我的问题类似于此线程中提出的问题:如何避免这个使应用程序变慢的非常重的查询?
我们检查了外键缺失索引并找到了一些。添加缺失的索引实际上产生了相反的效果,使查询速度更慢了。一个重要的信息是,我们的客户在单个Oracle安装上复制了我们的模式21次。每个模式中有将近1,000个表。我们是否向Oracle请求太多,因为有这么多表格(当然还有索引)?我不知道他们的硬件是什么,但我的问题是,这种方法是否合理,或者将用户分配到不同的SIDs是否更好?
以下是Hibernate执行的查询。客户告诉我们,执行此查询时它会消耗大约45%的处理器(尽管我不知道持续多长时间)。
欢迎提供建议, 史蒂夫
SELECT NULL AS table_cat,
owner AS table_schem,
table_name,
0 AS non_unique,
NULL AS index_qualifier,
NULL AS index_name,
0 AS TYPE,
0 AS ordinal_position,
NULL AS column_name,
NULL AS asc_or_desc,
num_rows AS CARDINALITY,
blocks AS pages,
NULL AS filter_condition
FROM all_tables
WHERE table_name = 'BOOKING'
AND owner = 'FORWARD_TN'
UNION
SELECT NULL AS table_cat,
i.owner AS table_schem,
i.table_name,
DECODE (i.uniqueness, 'UNIQUE', 0, 1),
NULL AS index_qualifier,
i.index_name,
1 AS TYPE,
c.column_position AS ordinal_position,
c.column_name,
NULL AS asc_or_desc,
i.distinct_keys AS CARDINALITY,
i.leaf_blocks AS pages,
NULL AS filter_condition
FROM all_indexes i,
all_ind_columns c
WHERE i.table_name = 'BOOKING'
AND i.owner = 'FORWARD_TN'
AND i.index_name = c.index_name
AND i.table_owner = c.table_owner
AND i.table_name = c.table_name
AND i.owner = c.index_owner
ORDER BY non_unique,
TYPE,
index_name,
ordinal_position