Php 用关系抓取数据。1个大查询或几个小查询

Php 用关系抓取数据。1个大查询或几个小查询,php,mysql,performance,code-readability,Php,Mysql,Performance,Code Readability,假设我有一个表结构,如 我想获取所有用户元 将图像中的所有表连接起来进行大查询是否更好 SELECT [columns ...] FROM usermetasections LEFT JOIN usermetakeys ON ... LEFT JOIN usermetas ON ... LEFT JOIN users ON ... WHERE users.id = xxx 。。。或者将它们分解成更小的查询,如 Loop through SELECT * FROM usermetasecti

假设我有一个表结构,如

我想获取所有用户元

将图像中的所有表连接起来进行大查询是否更好

SELECT [columns ...] FROM usermetasections LEFT JOIN usermetakeys ON ...
LEFT JOIN usermetas ON ...
LEFT JOIN users ON ...
WHERE users.id = xxx

。。。或者将它们分解成更小的查询,如

Loop through SELECT * FROM usermetasections
    Loop through SELECT * FROM usermetakeys WHERE section = xxx
        Loop thought SELECT * FROM usermetas WHERE key = xxx AND user = xxx

我认为如果我采用第1种方法,它对“机器”性能的影响会更快,但对开发人员性能的影响会更坏吗?阅读起来越难,将查询解析为PHP对象的代码就越多?

通常,您让数据库本身进行连接。这就是关系数据库管理系统的用途。它包含无数的优化,这些优化将比您的平均应用程序代码表现得更好


有时,这确实会在通过网络发送的信息方面产生大量开销(例如,您循环了1000条记录,并且只有在满足一些复杂条件时,您才需要来自另一个表的信息),在这种情况下,您可以让您的应用程序代码进行连接,但即使这样,您也可以使用
从yourtable.id(list,of,IDs)中加入的yourtable中重新查询字段

通常,您让数据库本身进行加入。这就是关系数据库管理系统的用途。它包含无数的优化,这些优化将比您的平均应用程序代码表现得更好


有时,这确实会在通过网络发送的信息方面产生大量开销(例如,您循环了1000条记录,并且只有在满足一些复杂条件时,您才需要来自另一个表的信息),在这种情况下,您可以让您的应用程序代码进行连接,但即使如此,您也可以使用
重新查询,从yourtable.id所在的表(list,of,IDs)

+1中选择字段,以
查找yourtable.id所在的表(list,of,IDs)
。不需要在循环中执行查询。+1表示
yourtable.id所在的位置(list,of,id)
。不需要在循环中执行查询。