【发布时间】:2013-01-31 10:44:47
【问题描述】:
我正在开发一个 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),例如一个小时或更长时间,以减少服务器(因为这是分析数据,它确实应该是实时的,但我担心即使没有更改,服务器也会因查询相同的数据而过载)?!
任何帮助将不胜感激。
【问题讨论】:
标签: mysql sql performance