用关系抓取数据。 1大查询或afew小查询

时间:2011-06-07 06:36:32

标签: php mysql performance code-readability

假设我有一个像

这样的表格结构

enter image description here

我想抓住所有用户元素

最好是一个大型查询加入图像中的所有表格......

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对象?

1 个答案:

答案 0 :(得分:4)

通常,您让数据库本身进行加入。这就是关系数据库管理系统的用途。它包含无数的优化,它们的性能优于普通的应用程序代码。

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