Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL需要关于存储大数据的数据库结构的建议_Php_Mysql - Fatal编程技术网

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 '';