Форум программистов CodeGuru
18 Сентябрь 2018, 23:31:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос из таблиц один ко многим  (Прочитано 17871 раз)
0 Пользователей и 1 Гость смотрят эту тему.
arvitaly
Новичок
*
Офлайн Офлайн

Сообщений: 2


Просмотр профиля
« : 22 Февраль 2013, 09:36:33 »

Такая задачка

Цитировать
table 1 (порядка 200к записей)
id name

Цитировать
table2 (соответственно, порядка 1млн записей)
id table1_id field2
Соответственно table1 и table2 соединяются по table1.id и table2.table1_id
Необходимо выбрать записи из первой таблицы по условию

Цитировать
(table2.id = 1 И table2.id = 3)
ИЛИ
(table2.id = 4 И table2.id = 5)
ИЛИ
(table2.id = 7 И table2.id = 9)
....

Помогите оптимизировать запрос Улыбка Пробовал subquery и join с group by
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 22 Февраль 2013, 20:34:35 »

На что сразу взгляд натыкается:

(table2.id = 1 И table2.id = 3)
ИЛИ
(table2.id = 4 И table2.id = 5)
ИЛИ
(table2.id = 7 И table2.id = 9)
....

id у table2 не может быть одновременно и 1 и 3, например. Поэтому если условия действительно так составлены, то любой запрос будет возвращать пустой кортеж записей.
Ну это мелочи  Голливудская улыбка

Насколько я понимаю, суть в том, что надо выбрать из первой таблицы те записи, у которых значение id содержится как table1_id в подмножестве записей из второй таблицы ?

Если так, то лучше наверно делать через IN с подзапросом. Как то так:
Код:
select
id,
name
from
table1
where
id in
(
select
table1_id
from
table2
where
условие_для_выборки_из_table2
)


Пробовал subquery и join с group by

Группировка работать медленно будет.

Но вообще сейчас СУБД некоторые типа оракла умные весьма. Могут сами запрос оптимизировать так, что разницы между оптимальным вариантом и не оптимальным не будет. Так что конкретные случаи стоит посмотреть с профайлером.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!