我正在使用 Ajax 将查询发送到 PHP 服务器,然后运行 SQL 查询以获取数据。因为查询涉及到三张表(两个大的),所以JOIN这三张表很慢。
然后我将 SQL 查询拆分为三个查询。它提高了效率(对于小数据集)。但对于大型数据集,由于 PHP 程序将三个查询一个一个地运行,并在每个查询之后处理结果,因此会有 30 秒的超时(默认)。我不想删除此默认设置。
为了避免超时,我也在考虑把这三个query都跑一遍,把结果返回给JS,让client端去处理。
还有其他方法吗?
添加
基本上,我想要三个输出,title
、extviews
、allviews
,对于每个项目,WHERE extviews>somevalue
。 title
来自一个小表,extviews
和 allviews
来自两个不同的大表。我把所有的字段都索引了,但是加入两个大表还是需要很长时间。
所以我首先聚合一个表以获得每个项目的 extviews
,以及项目 id
的列表。将结果组织成一个数组,用于 JSON 输出到 JS。然后使用 id
列表,我得到每个项目的 title
,并聚合另一个表以获得 allviews
。然后我用新结果更新数组。
最佳答案
除非你的 mysql 服务器真的重载,否则使用连接通常会更快。我猜你已经在你的表上定义了索引? (用于连接条件和 where 子句中的字段) 在客户端进行处理也可能是个问题,因为您必须发送大量数据才能进行连接...
编辑: 如果所有“简单”优化都完成了,那么你有 2 个选择......你刚才描述的那个(如果可能的话,在客户端大小上做 - 你发送给客户端的 json 数组的大小(以字节为单位)是多少?) 您的另一种选择是在后台进行处理(通过 cron)并以某种方式缓存结果。
关于php - JS、PHP、MySQL获取大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795588/