banner image

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 условия

Reviewed by andrey on ноября 15, 2017 Rating: 5

Комментариев нет:

Технологии Blogger.