SELECT WHERE IN: Подскажите оптимальный вариант взаимодействия PHP — MySQL
SELECT `ID` FROM `TABLE_A`WHERE `FIELD_C` = '123';
SELECT * FROM `TABLE_B` WHERE `FIELD_A` IN ('результат 1-ого запроса');
Возникает вопрос: а если результатом первого запроса будет 1k идентификаторов?
Возникает вопрос: не является ли этот запрос сложным?
Так вот, что лучше:
— 1 вариант с двумя простыми запросами к БД, но, возможно, сложным для разбора вторым запросом, если кол-во передаваемых идентификаторов, например тысяча?
— 2 вариант с одним запросом, но вложенным?
- Вопрос задан более трёх лет назад
- 23937 просмотров
пока у вас нет нагрузок как у Твиттера, не делайте так. только усложните себе жизнь, написанием своих собственных джойнов на php
![]()
Хотя JOIN'ы меня очень смущают, потому как часто читал статьи по оптимизации в которых не рекомендуется их использовать.
![]()
select * from tableA join tableB using (someFiled)
select * from tableA, tableB
where tableA.someField = tableB.someField
Эти две записи синонимы, так что inner join-ов бояться не следует.
Не вижу, почему нужно боятся left join.
![]()
В остальных случаях 1 вариант.
![]()
![]()
я когда-то делал вариант 2 и упирался в них.
![]()
Как внутри все будет работать пока что Вас не должно волновать, главное чтоб этот метод (функция) возвращала _всегда_ одни и те же данные. Потом когда (если?) будет тормозить, или Вас будет что-то не устраивать Вы этот метод переделаете как душа пожелает.
Так что не важно что именно вы сделаете, главное выделяйте такие спорные вопросы в одном месте, которое _всегда_ возвращает одни и те же данные, как бы Вы его не меняли.
очень хочу узнать про проект в котором это таки понадобилось сделать.
а жаль. потому что обычно получается наоборот и два три сервера работают заметно медленнее чем один, написание слоя абстракции от того что у вас несколько серверов занимает нереальное время, а администрировать это вообще невозможно.
![]()
Вариант 1 может иногда не работать из-за попадания на лимиты:
1. превышение максимальной длины запроса
2. превышение максимального количества параметров в IN. да, там тоже есть ограничения
select * from table1,table2 where условия
или запрос через
select * from table1 join table2 on условие where условия
Комментариев нет: