Sql 如何提高以下查询的性能

Sql 如何提高以下查询的性能,sql,oracle,sql-tuning,Sql,Oracle,Sql Tuning,根据数据,上述查询需要5-20秒。为了更好地进行调优,可以进一步改进哪些方面。您可以从修复以下基本问题开始: 上部(映射到剖面)=上部(“诊断测试和检查”) 除非使用区分大小写的colaltion,否则upper只做一件事:确保不使用索引,否则查询可能会减慢速度。如果不需要区分大小写的排序规则,请不要使用区分大小写的排序规则 然后取下无用的鞋面。你可以从修复基本面开始,如: 上部(映射到剖面)=上部(“诊断测试和检查”) 除非使用区分大小写的colaltion,否则upper只做一件事:确保不使

根据数据,上述查询需要5-20秒。为了更好地进行调优,可以进一步改进哪些方面。

您可以从修复以下基本问题开始:

上部(映射到剖面)=上部(“诊断测试和检查”)

除非使用区分大小写的colaltion,否则upper只做一件事:确保不使用索引,否则查询可能会减慢速度。如果不需要区分大小写的排序规则,请不要使用区分大小写的排序规则


然后取下无用的鞋面。

你可以从修复基本面开始,如:

上部(映射到剖面)=上部(“诊断测试和检查”)

除非使用区分大小写的colaltion,否则upper只做一件事:确保不使用索引,否则查询可能会减慢速度。如果不需要区分大小写的排序规则,请不要使用区分大小写的排序规则

然后删除无用的鞋面。

尝试删除子查询:

select 
    m.* 
from 
    MEDICALHIERARCHY_LEAF_LEVEL_V_5_0_LC_1 m 
inner join  
    (select synid 
     from SYNID_PROFILE_MAP_5 
     where upper(map_type) = upper('primary') 
       and upper(map_to_profile) = upper('Diagnostic Tests & Exams'))
map on m.name = map.synid 
where 
    m.Depth is null
您可能需要根据您的连接条件将
m.Depth为null
放入
WHERE
子句中

尝试删除子查询:

select 
    m.* 
from 
    MEDICALHIERARCHY_LEAF_LEVEL_V_5_0_LC_1 m 
inner join  
    (select synid 
     from SYNID_PROFILE_MAP_5 
     where upper(map_type) = upper('primary') 
       and upper(map_to_profile) = upper('Diagnostic Tests & Exams'))
map on m.name = map.synid 
where 
    m.Depth is null
根据您的连接条件,您可能需要将
m.Depth为null
放入
WHERE
子句中

SELECT m.* 
FROM MEDICALHIERARCHY_LEAF_LEVEL_V_5_0_LC_1 m INNER JOIN  
SYNID_PROFILE_MAP_5 map ON (CASE WHEN m.Depth is null THEN m.name end)=(CASE WHEN UPPER(map_type) = 
UPPER('primary') and UPPER(map_to_profile)=UPPER('Diagnostic Tests & Exams') THEN map.synid end)
在m*中避免使用*而不是使用此列名

试试这个

SELECT m.* 
FROM MEDICALHIERARCHY_LEAF_LEVEL_V_5_0_LC_1 m INNER JOIN  
SYNID_PROFILE_MAP_5 map ON (CASE WHEN m.Depth is null THEN m.name end)=(CASE WHEN UPPER(map_type) = 
UPPER('primary') and UPPER(map_to_profile)=UPPER('Diagnostic Tests & Exams') THEN map.synid end)
在m*中避免使用*而不是使用此列名

试试这段代码(尽管我不知道真实的数据):

我删除了不必要的上层函数,并删除了您的JOIN to WHERE子句(因为它对您的选择没有帮助),同时将m.DEPTH设置为NULL作为第一个筛选器。

尝试此代码(尽管我不知道实际数据):


我删除了不必要的上层函数并删除了您的JOIN to WHERE子句(因为它不影响您的选择),同时将m.DEPTH设置为NULL作为第一个筛选器。

您是唯一知道数据的人。。。所以你是唯一一个能够改进它的人。我们不知道容量,索引,执行计划。。。如果没有这些信息,您希望我们如何帮助您@jamie Drq我想知道我可以使用什么替代方案来改进它(例如,对于upper来说,什么替代方案是因为upper本身是一个减慢查询速度的函数)如果您确实想改进该查询,我问您的信息是至关重要的,相信我您使用的是什么RDBMS?请将相关标签添加到您的question@marc_s我用的是oracleYou是唯一知道数据的人。。。所以你是唯一一个能够改进它的人。我们不知道容量,索引,执行计划。。。如果没有这些信息,您希望我们如何帮助您@jamie Drq我想知道我可以使用什么替代方案来改进它(例如,对于upper来说,什么替代方案是因为upper本身是一个减慢查询速度的函数)如果您确实想改进该查询,我问您的信息是至关重要的,相信我您使用的是什么RDBMS?请将相关标签添加到您的question@marc_s我正在使用oracle