Php 如何存储和检索大量数据以进行特定日期的检索+;摘要检索?
简化案例: 存储Php 如何存储和检索大量数据以进行特定日期的检索+;摘要检索?,php,mysql,database-design,data-structures,Php,Mysql,Database Design,Data Structures,简化案例: 存储 用户点击一个链接 链接\u每次单击+1 超级用户为每次单击设置乘数参数 每次点击链接奖励(+1*param) 每次单击也会记录用户ID 检索 必须在特定日期范围内进行查询(例如,“10月10日至10月23日之间,用户ID=4的点击次数”) 但是,大多数查询都是针对给定用户的所有日期的总和进行的 假设表变得庞大,两种查询都会变得非常缓慢,对吗 如何处理?同时存储在一个详细表(每个链接每个用户每次单击一行)和一个摘要表(每个链接每个用户一行)中?我听说过“汇总”数据,但我不知道
- 必须在特定日期范围内进行查询(例如,“10月10日至10月23日之间,用户ID=4的点击次数”)
- 但是,大多数查询都是针对给定用户的所有日期的总和进行的
NOW()
函数填充DATETIME列以获取当前日期和时间。关于选项(a)需要注意的是,标准将最小化汇总的数据,因此性能不应该是一个太大的问题。此外,不应该为details表编制索引,因为索引只会帮助获取数据,并降低将数据放入表的速度
超级用户奖励可能应该是一个单独的表,但这意味着您的详细信息表需要通过超级用户的用户ID或URL与超级用户关联userid
将是一个更好的选择
我听说过“汇总”数据,但我不知道这是什么意思
数据库原则是只存储您需要的内容——可以使用SUM和COUNT等函数计算摘要数据。可以,它可以像表格一样查询,但不存储任何数据。简单。:-)
一个用户表,我称之为用户表
一张点击表,我叫它ClickEvent
每个不同的链接对应一个表,我称之为超链接(避免在数据库中使用“链接”一词)
根据我们所知(不多),用户表不是很重要的问题或答案
超链接表将用于存储每个链接的所有信息,列为:
- 超链接
- 网址
- 点击值
- 报酬乘数
- ClickEventID,int(主键)
- 用户ID,int(FK)
- HyperLinkID,int(FK)
- 单击日期时间、日期时间
- ComputedEventValue(十进制或 小额货币)
在我看来,这似乎涵盖了主要思想。谢谢@OMG Ponies!这是一个极好的答案!总结数据的一个后续问题。我必须调用大约30个不同链接的总和来填充数据表。如果我按照你说的方式做,在我开始担心“不合理”的延迟之前,有多少记录?几千?数以百万计的?数亿?埃米尔:数据库可以轻松处理数百万条记录。这更多地取决于您正在执行操作的数据类型,以及您试图从这些信息中获得什么。谢谢@OMG。30个不同的总和将在DATETIME和一个INT列上执行。但是你说的基本上是“不用担心”谢谢你的帮助!