SQL查询耗时比预期长,如何优化?

Posted

技术标签:

【中文标题】SQL查询耗时比预期长,如何优化?【英文标题】:SQL query takes much longer than expected, how to optimize it? 【发布时间】:2018-10-14 11:48:02 【问题描述】:
select UPPER(x_col_name)  
from xyz_table  
where x_id = 2;

说上面查询的结果是 abc_column

WITH ref_data AS (  
SELECT MIN(abc_column_date) ref_date
FROM abc_table
WHERE
    abc_id = 6  
) SELECT abc_column, abc_column_date - ref_date age  
FROM abc_table, ref_data  
WHERE  abc_id = 6

第一个查询平均需要 0.27 秒,而最后一个查询需要 40 多秒,考虑到我不想使用索引,还有其他选择吗?

【问题讨论】:

样本数据和期望的结果以及对您想要做什么的解释会很有帮助。目前尚不清楚为什么您对xyz_table 的第一个查询与您对abc_table 的第二个查询有任何关系。 基本上你问的问题是,“当我开车去商店时需要 15 分钟,但当我开车到城里时需要 30 分钟用我叔叔的车。为什么会这样?”简单地说,您为我们提供了几乎足够的信息来解释为什么这两个查询具有不同的经过时间。 @GordonLinoff,谢谢您的回复,我的第一个查询将返回一个列名,例如“xyz_value”,第二个查询使用此结果。具体来说:在 xyz_table 中,我有具有相同前缀的列(例如,xyz_value 和 xyz_date),第一个查询将返回我用来查找相关列的前缀,如 xyz_date 中一样。 【参考方案1】:

我认为这是你想要的:

SELECT abc_column,
       ( abc_column_date - MIN(abc_column_date) OVER () ) as age
FROM abc_table
WHERE abc_id = 6;

而且应该更快。但是,如果您想加快查询速度,则不应排除索引。

【讨论】:

以上是关于SQL查询耗时比预期长,如何优化?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 优化:SQL 查询耗时很长

百万级sql优化查询

【DB2】SQL优化

SQL 查询耗时过长

sql如何计算会员在线时长

数据库查询性能 LinqDB vs Sql查询