php - 从大型 mySQL 数据库中排序/获取日期记录

标签 php mysql

我有一个单独的表来记录每天的数据,基本上是 webstats 类型:关键字、访问次数、持续时间、IP、销售等(每条记录总共可能有 100 字节) 每个表大约有几百万条记录。

我需要做的是拥有一个网络管理员,以便用户/管理员可以查看不同日期段的报告并按某些计算值排序。例如,用户可能想要上个月 15 日到本月 12 日的结果,按 SALE/VISIT 降序排序。

管理员/用户一次只需查看(比如说)前 200 条记录,并且在任何一个 session 中查看的总数可能不会超过几百条

由于涉及到任意日期期间,我需要对每条记录的相关列进行汇总,然后才能进行选择。

我的问题是是否可以实时生成报告,或者它们是否会太慢(表格并不罕见 - 如果有的话 - 在插入当天的数据后更新)

这样的场景是否更适合索引或表扫描?

此外,所有日期的大型表是否比每个日期都有单独的表更好(几乎没有连接)

提前致谢!

最佳答案

如果每天的数据都有一个单独的表,那么一个月的汇总将需要对 30 多个表中的每一个进行相同的分析。在一年多的时间里,您将需要对大约 365 个表进行分析。这将是一场噩梦。

几乎可以肯定,拥有一个索引良好的单个表比拥有大量表要好。一些 DBMS 支持分段表 - 如果 MySQL 支持,则按日期分段单个大表。我倾向于按月进行碎片化,特别是如果正常查询持续一个月或更短时间并且不跨越月份边界。 (即使涉及两个月,通过适当的碎片消除,查询引擎也不必读取大部分数据;只需读取这两个月的两个碎片。它可能能够并行执行这些扫描,甚至再次,取决于 DBMS。)

有时,对表进行顺序扫描比进行索引查找更快 - 不要简单地假设因为查询计划涉及表扫描,所以它会自动表现不佳。

关于php - 从大型 mySQL 数据库中排序/获取日期记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/988896/

相关文章:

MYSQL 线程限制

mysql - 使用 'GROUP BY' 而首选在另一个表中关联的行

MySQL 按中间表中的匹配数排序

php - Web 应用程序上的小部件

php - 调用函数 - 变量

javascript - php://stdin 读取额外字符

php - 元素临 : Change or remove category/tag/author prefix from Archive Title

mysql查询删除字符串中最后一个逗号后的空格

javascript - php 变量转换为 javascript

php - stmt->get_result() 未完成