Php MySQL需要关于存储大数据的数据库结构的建议
我需要存储我的网站的统计数据 我需要这些Php MySQL需要关于存储大数据的数据库结构的建议,php,mysql,Php,Mysql,我需要存储我的网站的统计数据 我需要这些 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. 我知道这些方法 表格所有_统计数据 然后我可以查询为 SELECT * FROM all_stats WHERE category=x AND date&
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.
我知道这些方法
表格所有_统计数据
然后我可以查询为
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.
然后我可以像这样提问
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 country_数组进行查询的方法,我可以用我喜欢的任何方式进行排序
或者提出你认为最好的解决方法
谢谢您的所有统计结构可能都很好。此查询:
SELECT *
FROM all_stats
WHERE category = x AND date <= today AND date >= last week
可以从索引中受益。我实际上会推荐两种:类别,日期和日期。第一种方法可以大大加快查询速度。第二种方法处理不查找特定类别的查询
如果您通常希望同时使用所有国家/地区,您可能会发现将这些国家/地区转为中心会有所帮助。它实际上减少了表格的绝对大小和行数——如果每天都代表所有或大多数国家的话。查询一个包含数百列的表以及为新国家/地区维护表时会出现问题,MySQL对表中的列数有限制,因此对国家/地区有效的方法可能在省/州/市级别无效。您可以添加以下索引:
ALTER TABLE `all_stats`
ADD INDEX `categoryDate` (`category` ASC, `date` ASC) COMMENT '';
在日期列添加索引请在使用时包含查询结果您是在工作台、sqlcommand行中查看结果,还是有gui?最好制作一个带有分页的gui,以减少获取时间。同时添加AI主键。。如果在给定的时间内行数超过100万,那么索引是否有效month@TallboY . . . 应该这样。有数百万行的表很容易处理。如果您知道所有或大多数查询都包含日期范围,您可能还想考虑对该表进行分区。对于分区,但我不知道足够多,但我担心的是在分区表之后,我可以从表的分区部分查询。当然可以。当您在查询的where子句中使用分区键时,您将获得分区的好处,最自然的分区键是date。好的,我将尝试使用分区索引。如果给定的monthIt中的行数超过100万,索引是否有效。但在这种情况下还有更多的解决方案,比如我对分区了解不够,但我会学习,我关心的是在分区表之后,我是否可以从表的分区部分进行查询。是的,您可以,但在尝试向表中添加分区之前,请阅读一些教程,以确保您的操作正确。好的,我将尝试使用分区进行索引,我也想接受你的回答,但不能。谢谢你的链接。
| 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
SELECT *
FROM all_stats
WHERE category = x AND date <= today AND date >= last week
ALTER TABLE `all_stats`
ADD INDEX `categoryDate` (`category` ASC, `date` ASC) COMMENT '';