gpt4 book ai didi

c# - 使用不同的参数多次运行相同的查询

转载 作者:行者123 更新时间:2023-11-29 09:44:13 24 4
gpt4 key购买 nike

我需要从 .net 服务针对 MYSQL 数据库运行选择 SQL 查询。该查询大约需要 1 秒才能完成,需要连续执行 36 次,每次运行的日期不同。

查询的简单示例,其中每次执行的日期都会更改:

SELECT * FROM person where date < "some date"

我想知道运行查询的选项是什么,以及性能方面的最佳选项是什么。我应该对数据库运行 36 次吗?使用存储过程并循环不同的日期?还有其他选择吗?

请注意,没有选项可以更改查询以减少执行次数,我必须运行它 36 次,并且我正在尝试找出每个选项的可行选项、优缺点。

编辑:

我会尽力使我的查询示例更清晰:

该查询由多个 select 语句组成,每个 select 语句都在进行计算:对金额求和或对出现次数进行计数等。每个查询都依赖于传递给查询的日期。我需要 36 个不同时间段的计算结果。

下面的示例不是原始查询,而只是其中的一部分,对表名称等进行了一些更改。只是为了演示总体思路。

我目前正在从 .Net 服务器针对 MYSQL 数据库运行查询 36 次。只是感觉这不是最好的方法。我可以考虑将查询移至存储过程,并可能在循环中运行相同的查询 36 次,而不是为每个查询调用数据库。我想知道是否有人有更好的想法来解决多次使用不同参数运行相同查询的问题。

示例:

SET @id = 11111;
SET @calculations_date = "2019-05-05";
SET @calculations_date_minus_1_year = DATE_SUB(@calculations_date, INTERVAL 1 YEAR);

SELECT customers.id,
IFNULL( (SELECT COUNT(DISTINCT id) FROM customer_data WHERE id = @id AND customer_data.date >= DATE_SUB(@calculations_date, INTERVAL 2 YEAR) AND customer_data.date <= @calculations_date) , 0) as customers_in_last_24_months,
IFNULL( (SELECT SUM(amount) FROM other_customer_data WHERE id = @id AND date <= @calculations_date_minus_1_year), 0) AS total_other_customer_data_until_12_months_before_date,
IFNULL( (SELECT SUM(amount) FROM other_customer_data2 WHERE id = @id AND date <= @calculations_date_minus_1_year), 0) AS total_other_customer_data2_until_12_months_before_date,
IFNULL( (SELECT SUM(amount) FROM other_customer_data3 WHERE id = @id AND date <= @calculations_date_minus_1_year), 0) AS total_other_customer_data3_until_12_months_before_date,
FROM customers
WHERE customers.id = @id;

谢谢!

最佳答案

嗯,提高 select 语句性能的第一个本能 react 是在表中引入索引(在您的例子中是日期列)。优点:快速、简单缺点:需要更多磁盘空间(取决于索引类型和表大小,这可能相当大)

我想到的另一个选择是将整个表加载到内存中并在那里进行过滤。这当然更快,但特别是对于较大的表通常不可行,因为您可能会耗尽 RAM。

如果有任何方法可以重写查询,您可能想一次选择所有 36 个人,但您说“没有更改查询的选项”...所以我猜这个选项已经过时了 window ?

您也可以尝试使用物化 View ,但我对 MySql 知之甚少,无法判断这对您的情况是否有意义。

希望我能够为您提供一些可以作为起点的选项;)

关于c# - 使用不同的参数多次运行相同的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com