MySQL 分区,因为用户和时间戳日期范围

Posted

技术标签:

【中文标题】MySQL 分区,因为用户和时间戳日期范围【英文标题】:MySQL partitioning because of users and timestamp date ranges 【发布时间】:2019-11-05 01:38:53 【问题描述】:

我有一个应用程序的案例,该应用程序有大量用户,他们的活动表上有数百万行的统计数据 - 关于销售流量的高流量网站 = 数据增长得令人难以置信。用户活动表中还有一个时间戳列。您是否建议根据时间戳按年分区和按月分区?更好的是,我认为按月然后按天会更好。大多数检查是针对今天、昨天、过去 7 天、过去 30 天、本月或上个月的时间戳。任何性能问题,如果用户想按天或按月检查今年的统计数据?访问的详细信息有时会获得大量数据,而且加载速度似乎很慢。我提到的分区方式会有所帮助吗?在每个查询中,都会检查时间戳在 X 和 Y 之间的位置。或者可能按用户 ID 分区?根据我对数据库分区的了解,我认为按日期是最好的,并且可能会提高性能。要进行分区,我需要将时间戳列添加到主索引。也许仅此一项就可以提高性能。我真的问,因为表很大,这些操作将花费大量时间,锁定,等待......也许还有,通过分区,让 mysql 根据时间戳范围检查特定分区,可能会进一步提高性能?服务器版本:10.1.41-MariaDB-1~bionic - mariadb.org 二进制发行版。最好只包括一个“未来”分区?有什么方法可以让它自动创建“未来”分区,其功能类似于 MONTH(timestamp),然后是子分区 DAY(timestamp)?听起来已经像超大型存储过程了。只是更好地了解分区。谢谢!

【问题讨论】:

【参考方案1】:

分区本身并不提供性能

PARTITION 提供帮助的用例很少。一个是基于时间戳/日期时间的DELETEing“旧”数据。但我没听说你需要那个?

请提供您现在拥有的CREATE TABLE,以及您需要运行的主要查询。一些索引技术可能会有所帮助。或者一些汇总表。

http://mysql.rjweb.org/doc.php/partitionmainthttp://mysql.rjweb.org/doc.php/index_cookbook_mysqlhttp://mysql.rjweb.org/doc.php/summarytables

【讨论】:

以上是关于MySQL 分区,因为用户和时间戳日期范围的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试执行时间戳用户定义函数时遇到运行时错误(范围)

mysql获取当前系统日期和时间

为啥mysql中的时间戳范围为1970-2037年?

如何处理mysql中的时间戳读取问题

将MYSQL数据库里的时间戳转换成时间

将MYSQL数据库里的时间戳转换成时间