【发布时间】:2017-04-27 10:22:47
【问题描述】:
我正在 MYSQL 数据库的一个非常大的表中运行关于广告收入的查询。它包含许多维度,例如设备类别、日期、广告客户、垂直、creative_size、位置等,以及一些指标,如投放的展示次数、点击次数和收入。
表格用于展示广告效果,因此通常按一维或二维分组并按维度过滤。
我已将所有内容放在一张表中以避免连接并使其尽可能快,但由于维度的数量,尤其是。广告客户,表很大,已经超过 2.8Gb 并且还在增长。
我已经尝试过索引和分区,但它仍然很慢,所以我正在考虑通过按一组较小的维度对数据进行分组来创建一个较小的版本,省略广告客户列,即
Select date, creative_size, device_class,ssp,billing_type, location,
ad_impressions, clicks, revenue
from ADS
group by date,creative_size,device_class,ssp,billing_type,location
这将大大减少行数。
我试图将它用作视图,但它不是永久存储的,因此需要更长的时间。如何创建这样的表并根据另一个表使其保持最新状态?我需要编写脚本还是可以使用一些内置的 MySQL 功能?这是一个可行的方法吗?我当然愿意接受其他解决方案:)
【问题讨论】:
-
如果您阅读本文,尤其是关于查询性能的部分,它将帮助您获得更好的答案。 meta.stackoverflow.com/a/271056 这个问题对于 Stack Overflow 格式来说太宽泛了。
-
Ollie's 很好,但如果您需要更多帮助,我们确实需要
SHOW CREATE TABLE和实际查询。还要检查innodb_buffer_pool_size对于这么小的 RAM 大约是 600M。
标签: mysql sql performance view aggregate