我如何在 oracle 中优化慢查询

Posted

技术标签:

【中文标题】我如何在 oracle 中优化慢查询【英文标题】:How I can optimize slow query in oracle 【发布时间】:2017-10-30 12:42:07 【问题描述】:
INSERT INTO temp_cl_user_pks
    SELECT DISTINCT
      tb_abc_login.pk_tb_login_master login_master, --Modified for Pega_S-121214-007856 (Defect #7551)
      tb_user_details.email_id        email
    FROM tb_abc_login            tb_abc_login,
         tb_user_details         tb_user_details,
         tb_unit                 tb_unit,
         tb_user_hierarchy       tb_user_hierarchy,
         tb_company_lmn          tb_company_lmn,
         tb_user_company         tb_user_company,
         temp_cl_units_hierarchy aa
    WHERE tb_unit.processor_key                   LIKE aa.cl_region_key

      AND tb_abc_login.pk_tb_abc_login          = tb_user_details.fk_tb_abc_login
      AND tb_abc_login.rec_status               = 'AC'

      AND tb_user_value.rec_status              = 'AC'

      AND tb_unit.unit_id                       = tb_user_hierarchy.fk_unit_id
      AND tb_unit.purgeid                         IS NULL

      AND tb_user_hierarchy.fk_tb_abc_login     = tb_abc_login.pk_tb_abc_login
      AND tb_user_hierarchy.rec_status          = 'AC'

      AND tb_user_company.fk_tb_company_lmn     = tb_company_lmn.pk_tb_company_lmn
      AND tb_user_company.fk_tb_abc_login       = tb_abc_login.pk_tb_abc_login
      AND tb_user_company.rec_status            = 'AC'

      AND tb_company_lmn.rec_status             = 'AC'
      AND UPPER(tb_user_value.email_id)           LIKE email ESCAPE '\'
      AND tb_company_lmn.pk_tb_company_lmn      = aa.fk_tb_ref_hierarchy
      AND tb_user_hierarchy.fk_tb_ref_hierarchy = tb_company_lmn.pk_tb_company_lmn
      AND tb_unit.restricted_flag               ='Y'
        --AND  tb_user_company.secure_hierarchy ='Y'
      AND aa.region_short_code                  ='LMN';

【问题讨论】:

可能不相关,但切换到现代、明确的 JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 没有通配符时为什么要 LIKE? (或者表数据是否包含通配符?) 性能问题应该包括EXPLAIN ANALYZE和一些关于表大小、索引、当前时间性能、期望时间等的信息。Slow是一个相对术语,我们需要一个真实的值来比较。 添加表和索引定义。并说明计划。 请不要破坏您的问题。 【参考方案1】:

没有silver bullet 解决方案可以对 RDBMS 数据库进行查询优化和性能调整。

关于这个主题的文章数不胜数。您可以从几个地方开始挖掘以找出根本原因。

1) 检查系统资源。您的系统是否有足够的资源可供使用?

2) 检查系统是否配置正确。

3) 查看查询的explain plan。

如果您的问题不是通过步骤 1 或 2 找到的。那么您需要深入挖掘解释计划。如果您编辑您的问题并发布您的解释计划,其他人也许可以进一步帮助您。

【讨论】:

以上是关于我如何在 oracle 中优化慢查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle查询速度优化问题

ORACLE关联三表视图查询过慢问题,如何解决?

MySQL视图查询超慢,求解答

MySQL视图查询超慢,求解答

如何优化 django oracle 连接?

MySQL查询慢不知道如何优化