вызов базы данных, который получает неограниченные записи (может быть 10 или 10.000), например:
SELECT * FROM boo WHERE id = %d AND (approved = '1' OR (user = %d AND approved = '0'))
2 вызова базы данных, которые получают ровно 10 записей, а другой - одну запись:
SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10
SELECT * FROM boo WHERE user = %d AND approved = '0'
Заметьте, что я не могу выполнить свой собственный db-запрос. Я могу использовать только набор функций, которые выполняют запросы выше...
какая опция более эффективна/быстрее?
Это очень сложно ответить, но вот план, чтобы рассмотреть возможность повышения производительности:
Вы не указали, какие столбцы вы индексируете (если есть). Индексирование столбцов, которые вы хотите выбрать, и те, в которых вы используете условия, могут помочь вам получить лучшую производительность. Имейте в виду, что индексирование, помимо прочего, будет сопряжено с более тяжелыми расходами на запись. Если ваш общий случай для этих столбцов - поиск, я бы сказал, для индексации.
Убедитесь, что вы выбрали нужные столбцы, а не все. Это еще один фактор, который даст вам лучшую производительность.
Имейте в виду: каждый запрос имеет свои собственные накладные расходы. Добавление большего количества запросов будет сопряжено с большими затратами.
Имейте в виду: вам нужно на самом деле о средней производительности. Например, я вижу, что один из ваших запросов зависит от определенного пользователя. Спросите себя, кто эти пользователи, являются ли они случайными пользователями веб-сайтов, которые будут иметь пару записей, связанных с ними? или являются ли эти пользователи плотным сообществом, которые продолжают размещать сообщения и имеют много комментариев, связанных с ними? Эти вопросы помогут вам определить и приблизиться к количеству возвращаемых результатов (в среднем), и это должно использоваться для принятия правильного решения о том, с каким способом вы должны пойти.
Надеюсь, что это поможет!
Проверьте себя. Используйте EXPLAIN, вы можете получить обзор того, что происходит
Попробуй и посмотри?
Предполагая, что они находятся в огромной таблице с соответствующими индексами, это может быть самым быстрым:
SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10
UNION ALL
SELECT * FROM boo WHERE user = %d AND approved = '0'