小编Mag*_*ken的帖子

MERGE 与 UPDATE 与子查询的性能比较

请注意,为了便于阅读,我修改了表/字段名称等。有些原来的名字很混乱。

\n\n

我有三个不同的表:

\n\n
Retailer (Id+Code is a unique key)\n- Id\n- Code\n- LastReturnDate\n- ...\n\nDelivery/DeliveryHistory (combination of Date+RetailerId is unique)\n- Date\n- RetailerId\n- HasReturns\n- ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

Delivery并且DeliveryHistory几乎完全相同。数据会定期移动到历史表中,并且没有可靠的方法可以知道最后一次发生这种情况的时间。一般来说,Delivery 表非常小——通常少于 100,000 行——而历史表通常有数百万行。

\n\n

LastReturnDate我的任务是根据HasReturnsDeliveryDeliveryHistory 中当前最高日期值更新每个零售商的字段。

\n\n

以前这个问题已经通过定义如下的视图来解决:

\n\n
Retailer (Id+Code is a unique key)\n- Id\n- Code\n- LastReturnDate\n- ...\n\nDelivery/DeliveryHistory (combination of Date+RetailerId is unique)\n- Date\n- RetailerId\n- HasReturns\n- ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及以下 UPDATE 语句:

\n\n
SELECT Id, Code, MAX(Date) Date\n   FROM Delivery\n   WHERE HasReturns = 1\n   GROUP BY Id, …
Run Code Online (Sandbox Code Playgroud)

sql oracle

5
推荐指数
0
解决办法
1万
查看次数

获取 Quartz.NET 中的所有触发器

我需要检索 Quartz.NET 数据库中所有触发器的列表,以便我可以在表中列出有关它们的信息。我想要所有触发器,无论它们是在运行、等待、获取还是其他。我只使用一个调度程序名称和一个组,所以在我的情况下,这基本上是一个简单的事情SELECT * FROM QRTZ_TRIGGERS(不完全正确,因为我还需要QRTZ_CRON_TRIGGERS表中的信息),但我宁愿通过 API。

目前,我正在浏览所有已知的工作类型并GetTriggersOfJob为每一种工作类型打电话,正如我在互联网上的几个地方看到的那样。我的实际代码比这更复杂,但这是它的要点:

var allJobKeys = *a list of all known jobs*
var scheduler = *a new scheduler object*
var allTriggers = allJobKeys
    .Select(scheduler.GetTriggersOfJob)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这真的是唯一的方法吗?实在是太没效率了!我有大约 30 种不同的工作类型(并且还在增加),其中大多数可能在任何给定时间都具有与它们相关的零触发器。但这将每次需要 30 个数据库查询,而不是检索所有这些查询的单个查询。

请注意,我正在检索触发器的调度程序仅用于该目的以及用于创建/更新/删除触发器,并且永远不会用于执行作业。我确保从不调用scheduler.Start()它。

据我所知getAllTriggers(),Java 中的原始 Quartz API 中也没有,所以我假设这不存在是有原因的,即使这看起来很简单。当有多个调度程序主机以集群模式或类似方式运行时,它是否与并发处理有关?这似乎是人们经常想做的事情。

c# quartz.net

1
推荐指数
1
解决办法
5609
查看次数

标签 统计

c# ×1

oracle ×1

quartz.net ×1

sql ×1