gpt4 book ai didi

mysql - 单独保留记录子集以提高mysql的查询性能

转载 作者:行者123 更新时间:2023-11-29 10:37:47 24 4
gpt4 key购买 nike

我有一个包含超过 1000 万条记录的大表,并且它会不断增长。我正在对过去 24 小时的记录执行聚合查询(特定值的计数)。该查询所花费的时间将随着表中记录的数量而不断增加。

我可以通过将这些 24 小时记录保存在单独的表中并在该表上执行聚合来限制所花费的时间。 mysql 是否提供任何功能来处理这种情况?

表架构和查询供引用:

CREATE TABLE purchases (
Id int(11) NOT NULL AUTO_INCREMENT,
ProductId int(11) NOT NULL,
CustomerId int(11) NOT NULL,
PurchaseDateTime datetime(3) NOT NULL,
PRIMARY KEY (Id),
KEY ix_purchases_PurchaseDateTime (PurchaseDateTime) USING BTREE,
KEY ix_purchases_ProductId (ProductId) USING BTREE,
KEY ix_purchases_CustomerId (CustomerId) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

select COALESCE(sum(ProductId = v_ProductId), 0),
COALESCE(sum(CustomerId = v_CustomerId), 0)
into v_ProductCount, v_CustomerCount
from purchases
where PurchaseDateTime > NOW() - INTERVAL 1 DAY
and ( ProductId = v_ProductId
or CustomerId = v_CustomerId );

最佳答案

构建和维护单独的Summary table .

通过分区,您可能会得到一个小的改进,也可能不会得到任何改进。使用汇总表,您可能会获得 10 倍的改进。

汇总表的分辨率可能为 1 天,或者您可能需要 1 小时。请提供您当前拥有的SHOW CREATE TABLE,以便我们讨论更多细节。

(没有满足您想要的内置机制。)

关于mysql - 单独保留记录子集以提高mysql的查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112483/

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