我如何在 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 中优化慢查询的主要内容,如果未能解决你的问题,请参考以下文章