是多个Ajax请求更消耗服务端性能,还是服务端Mysql Join更消耗性能?

发布于 2022-09-04 00:40:18 字数 633 浏览 43 评论 0

有这样一个需求:

服务器上存有多张表,他们都有关联键content-id。

之前的做法是:

前端发出一个Ajax请求,后端mysql根据content-id,将多张表做join查询,php输出json,之后前端再将json解析渲染。

但是有同事说这样太消耗性能,要改成这样:

前端改为发出多个Ajax请求,后端对每张表都进行查询,每个ajax请求只对应一张表,不再做join,php输出多个json,之后前端再将json解析渲染。


补充表结构:

所有表的查询都非常简单:
之前的方法,就一条查询:

select * from tableA join tableB on tableB.id = tableA.id ...(可能有多个JOIN)... where id = 5;

要改成的方法,前面方法有多少张表,这个方法就有多少个Ajax请求,就有多少次查询:

select * from tableA where id = 5;
select * from tableB where id = 5;
select * from tableC where id = 5;

请问哪一种方案更好?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

深陷 2022-09-11 00:40:19

join耗的mysql瞬间机器性能。

而现在而言,数据库是最大的性能瓶颈所在。所以尽可能的降低数据库负载是web开发中重要的一环。

始于初秋 2022-09-11 00:40:19

看你们对服务器性能方面的要求了,服务器负载不高当然是join好,一个请求比多个请求的速度快很多

如果真的要做优化,不如做一张用来cache的表,表里面有常用的几个字段,直接请求这张表就好了。

溺深海 2022-09-11 00:40:19

为啥不一次ajax都发过去,然后后端爱咋查询就查询呗,查询性能是他后端的问题,你前端也要考虑自己的性能啊,移动端的tcp链接开销也不小啊(pc端可以无视)。

憧憬巴黎街头的黎明 2022-09-11 00:40:19

提醒:不要用 join

何以畏孤独 2022-09-11 00:40:19

你要觉得处理一直很快那就想怎么就怎么,慢了就分开,纠结啥

梅窗月明清似水 2022-09-11 00:40:19

对content-id的数据进行缓存啊, 数据修改了再刷新缓存

频繁查数据库, 还多表联查
连接数上来, 磁盘直接就废了

解决方案:

  1. SQL必然有很大的优化空间

  2. 加上Memcache, Redis之类的缓存吧

  3. 因为数据库的性能由磁盘决定, 所以, 用SSD硬盘, 能大大提高性能, 而且SSD对php也有加成(因为php要频繁加载文件require, include等)

握住我的手 2022-09-11 00:40:19

很简单啊,一次请求,多次查询就可以啦

眼中杀气 2022-09-11 00:40:19

将join查询改成多次单表查询

素染倾城色 2022-09-11 00:40:18

后端也可以不JOIN,分解成简单单表查询,再组装数据呀,多次ajax请求会有多次认证,网络请求次数多了也很耗资源的。

岁吢 2022-09-11 00:40:18

有病 后端不想一个查询就多个查然后合并好一次性返回嘛~分多个http请求这特么哪个脑残想出来的。网络延迟才是最主要的 能少则少啊~

尾戒 2022-09-11 00:40:18

首先,前端与后端交互,前端发给后端只有id这一项,一次ajax就够了,多次ajax完全没有必要而且会降低用户体验。

其次,后端拿到id后,如何查询,那是后端的事情。你只是前端,管这么多干嘛?

最后,对于后端,两种方法,到底谁性能高,因素太多。从你的提问来看,无论是你,还是你的同事,基本功都不扎实,做出的决策也是有问题的。既然这样,那就做个折中:测试一下,后端哪种方法性能高,就用哪种。当然,现在的测试结果,过了一个月后,可能结果又不一样。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文