1

假设我有一个像这样的表结构

在此处输入图像描述

我想获取所有用户元数据

对图像中的所有表进行大查询会更好吗...

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

4

1 回答 1

4

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

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

于 2011-06-07T06:39:59.193 回答