假设我有一个像
这样的表格结构
我想抓住所有用户元素
最好是一个大型查询加入图像中的所有表格......
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
我认为如果我采用第一种方法,“机器”性能会更快但对开发人员的性能有害吗?难以阅读,更多代码将查询解析为PHP对象?
答案 0 :(得分:4)
通常,您让数据库本身进行加入。这就是关系数据库管理系统的用途。它包含无数的优化,它们的性能优于普通的应用程序代码。
有时这确实会对通过网络发送的信息产生大量开销(例如,您循环超过1000条记录,并且只有在满足一些复杂条件时,您需要来自另一个表的信息)在哪种情况下,您可以让您的应用程序代码进行连接,但即使这样,您也可以使用SELECT yourfields FROM yourtables-joined WHERE yourtable.id IN (list,of,IDs)
重新查询