【发布时间】:2021-02-21 07:15:03
【问题描述】:
我有这两张表(简化),可以包含很多约会和很多情节
约会
date | person_id | episode_id
-----------+-----------+------------
12-11-2019 | 1 | 1
18-10-2019 | 1 | 1
11-10-2019 | 1 | 1
10-12-2018 | 1 | 2
10-11-2018 | 1 | 2
剧集
episode_id | Name
-----------+------------
1 | Episode 1
2 | Episode 2
现在我需要列出一集中的约会编号(按顺序)。
所以查询的结果是:
Appointment | Episode | Appointment number
------------+------------+----------------------
12-11-2019 | Episode 1 | 3
18-10-2019 | Episode 1 | 2
11-10-2019 | Episode 1 | 1
10-12-2018 | Episode 2 | 2
10-11-2018 | Episode 2 | 1
所以我的查询(简化)如下所示:
select
a.date, e.name,
(select count(*) from appointment a1
where a1.espisode_id = a.episode_id and a1.date < a.date ) + 1
From
appointment a
join
episode e on e.episode_id = a.episode_id
where
a.person_id = 1
现在这工作正常,但 sub select 语句正在杀死数据库。我们获得了超过 500 万次预约和超过 100 万集。
有什么想法可以优化这个,所以它的数据库负担更轻?
【问题讨论】:
标签: sql sql-server count subquery inner-join