繁体   English   中英

MySQL大表最佳实践

[英]MySQL best practices for huge table

我需要帮助的人。 我不是数据库专家,请尝试学习。

1)

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

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的结果: 说明

使用索引,查询的效率与在MySQL中的效率差不多。 挑战是每天总计2400万行。 正如解释计划中“ filesort”的使用所指出的那样,MySQL在聚合方面并不是很有效。

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

切换到RedShift的问题更多基于观点,因此我将给出一个简短的个人答案。 根据我对RedShift的经验,该性能给我留下了深刻的印象,并认为它可以很好地用于您的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM