gpt4 book ai didi

MySQL 大表最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:05 24 4
gpt4 key购买 nike

我需要帮助。我不是数据库专家并尝试学习。

1)

我有一个包含 45 列和 100m 条记录的表。 (每小时增加约 100 万)我需要从此表生成报告。当行数只有几百时,我的查询是这样的,并且运行良好:

SELECT 
COUNT(CASE EVENT_TYPE WHEN 'imp' THEN 1 ELSE NULL END) as imps,
COUNT(CASE EVENT_TYPE WHEN 'click' THEN 1 ELSE NULL END) as clicks,
COUNT(CASE EVENT_TYPE WHEN 'pc_conv' THEN 1 ELSE NULL END) as post_click_convs,
COUNT(CASE EVENT_TYPE WHEN 'pv_conv' THEN 1 ELSE NULL END) as post_view_convs,
SUM(booked_revenue_dollars) as booked_revenue,
TRIM(site_domain) as site_domain,
campaign_id

FROM
lld_standards

WHERE
`datetime` >= '2014-05-10 00:00:00' AND `datetime` <= '2014-05-10 23:59:00'

GROUP BY
campaign_id,
site_domain

HAVING
COUNT(CASE EVENT_TYPE WHEN 'imp' THEN 1 ELSE NULL END) > 100;

我为 datetime 创建了索引对于大多数报告,只有 GROUP BY 部分发生变化。

那么我该如何改进查询呢?

2)

我现在正在使用 RDS (m3.large) 并计划切换到 Redshift。 您认为现在是正确的举动吗?

谢谢。

编辑:

这是 EXPLAIN 的结果: EXPLAIN

最佳答案

有了索引,您的查询就可以像在 MySQL 中一样高效。挑战是每天聚合 2400 万行。正如在解释计划中使用“filesort”所指出的那样,MySQL 在聚合方面并不是很有效。

如果您要处理数天的数据,那么您应该考虑分区方案,这样每个数据都存储在自己的分区中。查看更多here .这可能会使数据的获取速度更快一些,但实时接收器是 group by。任何可以用来减少聚合行数的方法都会使聚合速度更快。

关于切换到 RedShift 的问题更多是基于意见,所以我会给出一个简短的、个人的答案。根据我使用 RedShift 的经验,它的性能给我留下了积极的印象,并认为它可以很好地处理您的查询。

关于MySQL 大表最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23845210/

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