gpt4 book ai didi

mysql - 让mysql查询更快

转载 作者:行者123 更新时间:2023-11-29 09:26:47 25 4
gpt4 key购买 nike

我的查询大约需要 29 秒才能执行,需要加快速度。我已经在aggregate_date列上创建了索引,但仍然没有真正的改进。每个aggregate_date 在表中有近26k 行。还有一件事,查询将从 2018 年 1 月 1 日开始运行到昨天

select MAX(os.aggregate_date) as lastMonthDay,
os.totalYTD
from (
SELECT aggregate_date,
Sum(YTD) AS totalYTD
FROM tbl_aggregated_tables
WHERE subscription_type = 'Subcription Income'
GROUP BY aggregate_date
) as os
GROUP by MONTH(os.aggregate_date), YEAR(os.aggregate_date);

我使用“解释选择”...并收到以下信息 enter image description here

更新

大部分查询时间都被内部查询消耗了,所以正如 scaisEdge 所建议的,我已经测试了查询,时间减少到几乎 8 秒。内部查询将如下所示:

select agt.aggregate_date,SUM(YTD) 
from tbl_aggregated_tables as agt
FORCE INDEX(idx_aggregatedate_subtype_YTD)
WHERE agt.subscription_type = 'Subcription Income'
GROUP by agt.aggregate_date

我注意到这种比较“WHERE agt.subscription_type = 'Subcription Income'”花费了大部分时间。那么有什么方法可以改变这一点,并且要提到的是,subscription_type 列只有 2 个值,即“订阅收入”和“订阅单位”

最佳答案

aggregate_date 列上的索引对性能没有什么用处,因为不涉及 where 条件
查看您的代码,有用的索引应该位于 subscription_type 列上

您可以尝试使用冗余索引,同时添加 select 子句中涉及的列(尝试从索引中获取查询中的所有数据,避免访问表),这样您的索引就可以是

create idx1 on tbl_aggregated_tables (subscription_type, aggregate_date, YTD )

最后一个group by的含义似乎与select子句不一致

关于mysql - 让mysql查询更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59465810/

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