查询优化(自动编号)

时间:2020-11-09 11:05:49

标签: sql sql-server count subquery inner-join

我有这两个表(简体),可以包含很多约会和很多情节

约会

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

现在这可以正常工作,但是子select语句正在杀死数据库。我们获得了超过500万次约会和超过一百万集。

有什么想法可以优化它,从而减轻数据库负担吗?

1 个答案:

答案 0 :(得分:3)

使用窗口功能!

 await $.ajax("generateFile.php", {
     type: "POST",
     data: {
        param_1: param_1,
        param_2: param_2
    },        
    success: function(data){
        var a = $("<a>")
            .attr("href", "path/filename_on_server.txt")
            .attr("download", "filename_on_client.txt")
            .appendTo("body");
        a[0].click();
        a.remove();
        },
    error : function(data) {
            alert("ajax error, json: " + data);
    }
});
相关问题