我需要存储我网站的统计信息。
我需要这些
1: I can query how many hits in day, week month, last month, etc based on a category.
2: Then I can sort stats according to countries, day, pages etc.
我知道这样做的方法
表all_stats
| category | page_url | country | date |.......
| x | index.php | US | timestamp |.......
| y | index2.php | UK | timestamp |.......
.
.
然后我可以查询为
SELECT * FROM all_stats WHERE category=x AND date<=today AND date>=last week
This works fine but problem with this is
as database increase query takes a lot of time to execute.
要解决查询速度存储每日国家/地区的统计数据,请在上表中与256个国家/地区的其他表格等
表daily_stats
| category | page_url | US | UK |.......| date |
| x | index.php | 1000 | 1500 |.......| 1st |
| y | index2.php | 1500 | 2000 |.......| 2nd |
.
.
然后我可以查询
SELECT
SUM(US) AS us
SUM(Uk) AS uk
.
. //all 256 countries and island etc
.
.
WHERE category=x AND date<=today AND date>=last week
But this will be a big table with many columns
我看到的另一个问题是
创建表smart_stats
| category | page_url | country_array .......| date |
| x | index.php | US=>1000, UK=1500 .......| 1st |
| y | index2.php | US=>1500, UK=2000 .......| 2nd |
.
.
This can be smart approach if I can add all country stats in some way
请建议一种方法,使表格smart_stats country_array可以查询,我可以以任何方式排序
或者建议你认为这是最好的方法
由于
答案 0 :(得分:2)
你的all_stats
结构可能没什么问题。这个查询:
SELECT *
FROM all_stats
WHERE category = x AND date <= today AND date >= last week
可以从索引中受益。我实际上会推荐两个:(category, date)
和(date)
。第一个应该大大加快查询速度。第二个处理不寻找特定类别的查询。
如果您通常同时想要所有国家/地区,您可能会发现转动国家/地区有所帮助。它实际上减少了表格的绝对大小以及行数 - 如果每天都代表所有或大多数国家。在查询具有数百列的表时,以及为新国家/地区维护表时会出现问题(并且MySQL对表中的列数有限制,因此适用于各国的可能无法在省/州工作/城市层面。)
答案 1 :(得分:1)
您可以添加以下索引:
ALTER TABLE `all_stats`
ADD INDEX `categoryDate` (`category` ASC, `date` ASC) COMMENT '';