Получение данных с отношениями. 1 большой запрос или несколько маленьких запросов - PullRequest
1 голос
/ 07 июня 2011

Предположим, у меня есть структура таблицы, такая как

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

Я думаю, что если я пойду1-й подход, это будет быстрее для производительности "машины", но плохо для производительности разработчика?труднее читать, больше кода для разбора запросов на объекты PHP?

1 Ответ

4 голосов
/ 07 июня 2011

Обычно вы разрешаете самой базе данных выполнять присоединение .Для этого создана система управления реляционными базами данных.Он содержит бесчисленные оптимизации, которые будут работать лучше, чем в среднем по вашему коду приложения.

Иногда это действительно создает большие накладные расходы в отношении информации, передаваемой по сети (скажем, вы перебираете более 1000 записей, и только есливыполняется несколько сложных условий, вам нужна информация из другой таблицы), в этом случае вы можете позволить своему коду приложения выполнить соединение, но даже тогда вы можете просто повторно запросить с помощью SELECT yourfields FROM yourtables-joined WHERE yourtable.id IN (list,of,IDs)

...