我正在开发一个 Web 应用程序来显示 MYSQL 数据库表中的一些分析数据。我希望最多从大约 10,000 个总用户那里收集数据。该表将有每个用户数百万条记录。
我正在考虑为每个用户提供自己的表格,但更重要的是我想弄清楚如何优化数据检索。
SELECT COUNT
我使用特定日期的一系列查询从数据库表中获取数据。下面是一个例子:
SELECT * FROM
(SELECT COUNT(id) AS data_point_1 FROM my_table WHERE customer_id = '1' AND datetime_added LIKE '2013-01-20%' AND status_id = '1') AS col_1
CROSS JOIN
(SELECT COUNT(id) AS data_point_2 FROM my_table WHERE customer_id = '1' AND datetime_added LIKE '2013-01-20%' AND status_id = '0') AS col_2
CROSS JOIN ...
当我想检索最近 30 天的数据时,查询将是上面的 30 倍;同样是 60 天,等等。用户将能够选择天数,例如 30、60、90 和自定义范围。
我需要时间序列图表的数据。需要明确的是,每天的数据可能从数千条记录到数百万条记录不等。
我的问题是:
这是检索此数据的最高效方法,还是有更好的方法在一个 SQL 查询中获取我需要的所有时间序列数据?!当用户需要过去 2 年的数据(即可能超过 1000 行的 MySQL 查询)时,这将如何工作?!
我是否应该考虑将检索到的数据(例如使用 memcache)缓存更长的时间,例如一个小时或更长时间,以减少服务器(因为这是分析数据,它确实应该是实时的,但我害怕超载即使没有更改,服务器也会查询相同的数据)?!
任何帮助将不胜感激。