gpt4 book ai didi

需要 mysql 索引指导 - group by 子查询超慢

转载 作者:行者123 更新时间:2023-11-29 23:07:51 25 4
gpt4 key购买 nike

快速概述,我已经制定了一个 mysql 查询,但需要优化性能。

我原来的帖子是here但它已经变冷了,我迫不及待地想详细说明我试图实现的一些建议。所以这不是一个重复的帖子,但它是相关的。

这是一个需要 45 秒以上的查询,第二个子查询上的 group by 确实减慢了速度。

SELECT * FROM
(
SELECT DISTINCT email,
title,
first_name,
last_name,
'chauntry' AS source,
post_code AS postcode
FROM chauntry
WHERE mailing_indicator = 1
) AS x
JOIN
(
SELECT email,
Avg(amount_paid) AS avg_paid,
Count(*) AS no_times_booked,
Count(DISTINCT( Date_format(added, '%M %Y') )) AS unique_months
FROM chauntry
WHERE added >= Now() - INTERVAL 1 year
GROUP BY email
) AS y
ON x.email = y.email

基于 here 的索引建议我四处寻找一些索引示例,并提出了以下内容

ALTER TABLE `chauntry` 
ADD INDEX(`mailing_indicator`, `email`);

ALTER TABLE `chauntry`
ADD INDEX covering_index (`added`, `email`, `amount_paid`);

这对查询时间没有影响,我不确定我所做的是否接近,因为到目前为止我不需要使用索引。

欢迎提出有关如何正确索引我的表或如何修改查询的建议。

最佳答案

出于好奇,这个查询是否符合您的要求?

SELECT email, title, first_name, last_name, 'chauntry' AS source,
post_code AS postcode,
Avg(amount_paid) AS avg_paid,
Count(*) AS no_times_booked,
Count(DISTINCT( Date_format(added, '%M %Y') )) AS unique_months
FROM chauntry
WHERE added >= Now() - INTERVAL 1 year
GROUP BY email, title, first_name, last_name, post_code
HAVING SUM(mailing_indicator = 1) > 0;

它似乎遵循与您的查询相同的逻辑,只是邮寄指示器需要在过去一年中设置。

关于需要 mysql 索引指导 - group by 子查询超慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28214104/

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