PHP 批量网络请求同一个API,php – 在一个API请求中有多个连接的单个查询,或者在单独的API请求中有一些连接的几个查询?...

什么是最佳实践,什么提供最佳性能?

我目前有一个查询,其中包含许多LEFT JOIN,用于获取用户及其所有数据,如朋友,朋友请求等:

SELECT

`user`.`id` AS `user_id`,

`user`.`name` AS `user_name`,

`manager`.`id` AS `manager_id`,

`competition`.`id` AS `manager_competition_id`,

`competition`.`name` AS `manager_competition_name`,

`competition`.`week` AS `manager_competition_week`,

`country`.`id` AS `manager_competition_country_id`,

`country`.`name` AS `manager_competition_country_name`,

`club_template`.`id` AS `manager_club_template_id`,

`club_template`.`name` AS `manager_club_template_name`,

`club`.`id` AS `manager_club_id`,

`club`.`name` AS `manager_club_name`,

`club`.`ready` AS `manager_club_ready`,

`friend`.`friend_id` AS `friend_id`,

`friend_user`.`name` AS `friend_name`

FROM

`users` AS `user`

LEFT JOIN

`managers` AS `manager`

ON

`manager`.`user_id` = `user`.`id`

LEFT JOIN

`competitions` AS `competition`

ON

`competition`.`id` = `manager`.`competition_id`

LEFT JOIN

`countries` AS `country`

ON

`country`.`id` = `competition`.`country_id`

LEFT JOIN

`club_templates` AS `club_template`

ON

`club_template`.`id` = `manager`.`club_template_id`

LEFT JOIN

`clubs` AS `club`

ON

`club`.`id` = `manager`.`club_id`

LEFT JOIN

`friends` AS `friend`

ON

`friend`.`user_id` = `user`.`id`

LEFT JOIN

`users` AS `friend_user`

ON

`friend_user`.`id` = `friend`.`friend_id`

WHERE

`user`.`id` = 1

如您所见,这是一个非常大的查询.我的理由是,最好只有一个查询可以在一个API请求中完成,比如这个……

/api/users/1

…相对于一些查询,每个查询都在他们自己的API请求中,就像这样……

/api/users/1

/api/users/1/friends

/api/users/1/friend_requests

/api/users/1/managers

但是现在我很担心,因为它变得如此庞大的查询,它实际上会损害性能,而不是在单独的API请求中将其拆分.

什么会更好地扩展?

更新

我已将查询更改为完整查询.这不是最终的查询;我计划添加更多联接(或不是,取决于答案).

每个表都有一个id的PRIMARY KEY.所有关联列(competition_id,club_id等)都有常规INDEX.数据库引擎是InnoDB.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值