Снова запнулся, и вот в чем проблема, не знаю как правильно построить запрос:
есть черный список
2 таблицы:
1. users: id | name | surname | photo
2. black_list: id | ban_id | user_id | date
Нужно достать из black_list все записи где user_id = 3 например
и из users только name и photo.
Причем для users ищем по id, id берем из 1 запроса к black_list, поле ban_id
Нужен и здесь JOIN, или нужно делать 2 запроса?
учитывая что первый запрос к black_list вернет несколько записей, а значит из таблицы users нужно будет достать несколько строк, все делать в цикле тоже не вариант..
( проще - нужно достать name, photo имея несколько id и достать данные для каждого )
wkololo_4ever: Нужно будет прочесть..
Не подскажете ещё, когда нужно избегать join'ов, слышал много где что очень тяжкие запросы покрывают таблицу локами...
Покрыть таблицу "локами" :) можно и без джойнов, например используя бездумно exist или in в условии.
На счет тяжести - надо смотреть план выполнения запроса, соответственно его оптимизировать, создавать необходимые индексы, обновлять статистику, дефрагментировать базу. И будет все путем.
В простейшем случае индексы нужны на полях участвующих в выражении where или on в join, особенно на тех, которые связывают две таблицы, например, user.id и dlack_list.ban_id
Хотелось бы добавить, что join'ы для того и созданы, чтоб ими пользоваться. В большинстве своем, сервера баз данных имеют внутреннии оптимизатор, который пытается решить, как более правильно выполнить запрос.
Каждый раз, когда пишите SQL запрос к серверу, вы должны вспоминать, что SQL это такой язык, в котором вы "просите", что то, а серевер уже решает КАК это выполнить. Но не стоит указывть серверу, КАК достовать данные. Другимм словами, вы говорите ЧТО вам надо, но не КАК это делать.