gpt4 book ai didi

mysql - 如何在不影响实时事务的情况下高效地查询表

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:14 25 4
gpt4 key购买 nike

我有一个包含数百万条记录的高事务表,其结构如下:

transaction
--------------
id int
txn_status varchar
amount bigint
name varchar
txn_time datetime --Date and time of the transaction

txn_status字段值可以是 completedPending .我需要运行一个查询来检索具有以下特征的记录数:

  1. 交易 Pending txn_status自最后 15 分钟以来即 (current_time - txn_time) <= 15 minutes
  2. 交易 Pending txn_status在最后 16 到 25 分钟之间,即 (current_time - txn_time) >= 16 minutes and (current_time - txn_time) <= 25 minutes
  3. 交易 Pending txn_status在最后 26 到 30 分钟之间,即 (current_time - txn_time) >= 26 minutes and (current_time - txn_time) <= 30 minutes
  4. 交易 Pending txn_status超过 30 分钟即 (current_time - txn_time) > 30 minutes

目前我脑子里有两个解决方案:

  1. 使用 case 每分钟查询一次生产数据库where中的语句(case语句会根据上面的时间差对记录进行过滤分组)查询子句。

  2. 为避免对生产数据库造成过多负载,请使用具有类似表的单独数据库并使用 updateinsert触发器更新表,然后在数据库上执行上面第 1 条中的查询。

请如果有任何最佳或更好的解决方案来实现这一目标而不会给数据库增加太多负载,请分享。

最佳答案

如果你有一个表格的索引

CREATE INDEX txn_status_time ON transaction (txn_status, txn_time DESC)

并以与没有算术的 txn_time 相比的方式编写查询,那么您的查询将快得惊人

类似于:

SELECT 
COUNT(*),
CASE WHEN txn_time >= current_time - 15 mins THEN "last 15" ... END
FROM transaction
GROUP BY CASE WHEN txn_time >= current_time - 15 mins THEN "last 15" ... END

关于mysql - 如何在不影响实时事务的情况下高效地查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852860/

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