我有一个MySQL数据库表,每天大约有10-15k的插入,而且它肯定会在接下来的几个月中增加。
- Table Example (reservations): *important fields*
+----+--------+----------+---------+-----+
| ID | people | modified | created | ... |
+----+--------+----------+---------+-----+我需要提供每天的统计数据,根据用户选择的日期或日期范围,告知条目有多少(总数和指定的人数相同)。今天,我将执行两个查询,每个请求。它运行良好,具有理想的延迟,但我想知道如果有更多的数据,它是否会稳定。
- Single Date:
SELECT COUNT(*) from reservations WHERE created='DATE USER SELECTED'
SELECT COUNT(*), people from reservations WHERE created='DATE USER SELECTED' GROUP BY people
- Date Range:
SELECT COUNT(*) from reservations WHERE created BETWEEN 'DATE USE SELECTED' AND 'DATE USE SELECTED';
SELECT COUNT(*), people from reservations WHERE created BETWEEN 'DATE USE SELECTED' AND 'DATE USE SELECTED' GROUP BY people
IN MY VIEW
Pros: Real time statistics.
Cons: Can overload the database, with similar and slow queries.我想创建一个名为“statistics”的次要表,并在我的服务器上运行一个cron作业,每天早上计算所有统计数据。
- Table Example (statistics):
+----+------+--------------------+---------------------------+---------------------------+-----+
| ID | date | numberReservations | numberReservations2People | numberReservations3People | ... |
+----+------+--------------------+---------------------------+---------------------------+-----+
- IN MY VIEW
Pros: Faster queries, do not need to count every request.
Cons: Not real time statistics.你觉得怎么样?有更好的方法吗?
发布于 2014-06-20 18:50:38
如果表中有正确的复合索引,则可以有效地满足所显示的聚合查询。如果您不确定复合索引,您可以阅读它们。
您的(created,people)上的索引reservations对这两个查询都是正确的。他们都可以满足于一个有效的索引扫描,称为松散范围扫描。您会发现,在您的系统中,在可预见的将来,它们足够快,您不需要费心处理第二个表。
这很好,因为像您提议的辅助表是造成混淆和错误的常见原因。
https://stackoverflow.com/questions/24333629
复制相似问题