首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle 11g :元数据查询非常慢

Oracle 11g :元数据查询非常慢
EN

Stack Overflow用户
提问于 2013-09-02 03:27:02
回答 3查看 3.9K关注 0票数 4

我认为应该显示模式中某些表的列的注释和约束(包括适当的检查条件)。

本质上我是(左)加入ALL_COL_COMMENTS to ALL_CONS_COLUMNS to ALL_CONSTRAINTS.

但是,由于某些原因(大约需要10秒),这是非常慢的,尽管我有非常少的表(只有7个),非常少的列(总共有58列)。因此,查询返回的结果很少。而且还很慢。我能做些什么?

代码语言:javascript
运行
复制
  CREATE OR REPLACE FORCE VIEW "MYDB"."COMMENTS_VIEW" ("TABLE_NAME", "COLUMN_NAME", "COMMENTS", "CONSTRAINT_TYPE", "CHECK_CONDITION") AS 
  SELECT r.TABLE_NAME, r.COLUMN_NAME, r.COMMENTS, DECODE(q.CONSTRAINT_TYPE,'P', 'Primary Key', 'C', 'Check Constraint', 'R', 'Referential Integrity Constraint' ), q.SEARCH_CONDITION AS CHECK_CONDITION
      FROM  ALL_COL_COMMENTS r -- ALL_COL_COMMENTS has the COMMENTS
          LEFT JOIN ALL_CONS_COLUMNS p ON (p.TABLE_NAME = r.TABLE_NAME AND p.OWNER = 'MYDB' AND p.COLUMN_NAME = r.COLUMN_NAME) -- ALL_CONS_COLUMNS links COLUMNS to CONSTRAINTS
          LEFT JOIN ALL_CONSTRAINTS q ON (q.OWNER = 'MYDB' AND q.CONSTRAINT_NAME = p.CONSTRAINT_NAME AND q.TABLE_NAME = p.TABLE_NAME AND (q.CONSTRAINT_TYPE = 'C' OR q.CONSTRAINT_TYPE = 'P' OR q.CONSTRAINT_TYPE = 'R' ) ) -- this gives us INFO on CONSTRAINTS
    WHERE r.OWNER = 'MYDB' 
        AND 
    r.TABLE_NAME IN ('TABLE1', 'TABLE2', 'TABLE3', 'TABLE4', 'TABLE5', 'TABLE6', 'TABLE7')
        AND
    r.COLUMN_NAME NOT IN ('CREATED', 'MODIFIED', 'CREATED_BY', 'MODIFIED_BY') 
      ORDER BY r.TABLE_NAME, r.COLUMN_NAME, r.COMMENTS;
EN

回答 3

Stack Overflow用户

发布于 2013-09-02 04:51:22

确保字典和固定对象统计是最新的.检查最新的统计数据是解决几乎任何SQL性能问题的良好的第一步。字典和固定对象是不寻常的,很有可能以前没有人考虑过收集它们的统计数据。

代码语言:javascript
运行
复制
begin
    dbms_stats.gather_fixed_objects_stats;
    dbms_stats.gather_dictionary_stats;
end;
/
票数 4
EN

Stack Overflow用户

发布于 2013-09-02 03:51:45

在可能的情况下,尝试连接表上的列ids,而不是名称。如果你可以的话,甚至还有主人。示例:

代码语言:javascript
运行
复制
    ON p.TABLE_ID = r.TABLE_ID

此外,您正在从已经是谁知道有多少底层表的视图的对象中进行选择。查询优化器可能遇到了困难(可能会在某些方面放弃)。尝试将查询转换为使用基表。

票数 1
EN

Stack Overflow用户

发布于 2013-09-02 03:44:53

我要么使用查询分析器,要么(更简单)删除部分查询,直到它变得非常快。例如,删除DECODE()调用,可能就是这样做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18565296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档