我希望在完成该批次的所有作业后对批处理进行更新。为此,我想比较工作总数与完成总数。我正在使用下面的查询,但这是一个非常慢的查询。有什么建议可以改善吗?或者接近主要更新的其他方法?
SELECT DISTINCT j.BatchId,
j.JobStatusId,
COUNT(j.BatchId) OVER(PARTITION BY j.BatchID, j.JobStatusID),
COUNT(j.BatchId) OVER(PARTITION BY j.BatchID)
FROM [Job] j
ORDER BY j.BatchID
仅针对JobID(PK)的索引
答案 0 :(得分:1)
<<<<这不是测试>>>>
假设JobStatusId描述了这样的状态:
.wrapper {
width: 300px;
}
.sidebar {
float: left;
width: 100px;
height: 300px;
background-color:#f9b25e;
}
.content {
margin-left: 100px;
background-color:#45ca5f;
}
.column-left {
float: left;
width: 100px;
height: 100px;
background-color: #448bcc;
}
.column-right {
float: left;
width: 100px;
height: 200px;
background-color: #dd4444;
}
/* Example 1*/
.clearfix:after{
content: '';
display: block;
clear: both;
height: 0;
visibility: hidden;
}
/* Example 2*/
.clear { clear: both; }
/* Example 3*/
.ex-3 .content{
overflow: hidden;
}
您可以尝试这两个查询,不知道哪个更快,只需尝试一下:
0 = completed
1 = running
2 = error
或者这个:
SELECT DISTINCT j.BatchId AS CompletedJobs
FROM Job j
WHERE NOT EXISTS( --running jobs or jobs who ran into an error
SELECT TOP 1 1
FROM Job j2
WHERE j2.BatchId = j.BatchId
AND j2.JobStatusId IN (1,2))
您的原始查询必须订购很多(最终会导致性能不佳)。 在过去几年中,与数据库一起工作的经历向我展示了:只有2%的查询需要订购,其中我看到"顺序由"条款。甚至可能在1%; - )
DISTINCT,ORDER BY,COUNT OVER PARTITION,...永远不会是一个快速的操作 - 如果你把它们结合起来,你会看到结果是什么。