如何加快sql查询执行速度?

Posted

技术标签:

【中文标题】如何加快sql查询执行速度?【英文标题】:How to speed up sql query execution? 【发布时间】:2020-11-18 23:07:56 【问题描述】:

任务是执行sql查询:

select * from x where user in (select user from x where id = '1')

子查询包含大约 1000 个 id,因此需要很长时间。 也许这个问题已经存在,但我怎样才能加快速度呢? (如果可以加快速度,请为 PL SQL 和 T-SQL 或至少其中之一编写)。

【问题讨论】:

“子查询包含大约 1000 个 id”是什么意思? tsql plsql。我删除了这些冲突的标签,请只标记一个数据库:mysql、oracle、postgresql...? 【参考方案1】:

我首先将in 条件重写为exists

select * 
from x 
where exists (select 1 from x x1 where x.user = x.user and x1.id = 1)

然后,考虑在x(user, id)x(id, user) 上建立一个索引(您可以同时尝试两者,看看其中一个是否比另一个提供更好的改进)。

另一种可能是使用窗口函数:

select * 
from (
    select x.*, max(case when id = 1 then 1 else 0 end) over(partition by user) flag
    from x
) x
where flag = 1 

这可能会或可能不会比not exists 解决方案执行得更好,具体取决于各种因素。

【讨论】:

【参考方案2】:

ids 通常是唯一的。这样做就足够了吗?

select x.*
from x
where id in ( . . . );

如果id 还不是表的主键,您可能需要一个索引。

【讨论】:

以上是关于如何加快sql查询执行速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何加快包含 sql 查询的代码?

如果有一种方法可以预先计算 SQL 视图以加快查询速度?

我可以做些啥来加快这个 SQL 查询的速度?

如何加快我在 sql 中的查询

如何加快查询速度

SQL 百分位数计算运行非常缓慢 - 需要帮助加快速度