LINUX.ORG.RU

Глупый вопрос по SLQ

 , ,


0

1

Есть несколько таблиц, некоторые связаные.

Нужно, имея параметр одной, находить все записи в другой.Пример

select t1.*
from t1, t2,t3,t4
where
t1.id1 = t2.id1 and
t2.id2= t3.id2 and
t3.id3 = t4.id3
and t4.name="Vasia"
Вопрос: будет ли быстрее работать запрос если использовать не сравнение(where) а join?

Число записей со временем будет >100.000, сервер будет или mySQL или Microsoft SQL Server (выбираем не мы, что дадут то и будет).

★★★★

Последнее исправление: ymuv (всего исправлений: 1)

запусти оба варианта в консоли и сравни, а потом запости сюда резалт

а мы пока организуем тотализатор

ZuBB ★★★★★
()
Ответ на: комментарий от ZuBB

Проблема в том, что еще нет архитектуры базы, а количество соединений может колебаться от 0 (select t1.* from t1) до 7-9. Хотелось бы узнать мнение ЛОРовських аналитиков.

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

я не спец в sql, я только учусь. но когда я спросил очень похожый вопрос у моих коллег, они ответили что-то умное про «множини» (sets), пересечение, полные выборки итд. В итоге я понял одно что если join и не будет быстрее (хотя вряд ли) но и медленнее точно не будет, но зато точно буде правильнее.

Главное в этом деле индексы. если они есть для тех полей по которым идет поиск то все будет ок.

ps: смотрели в гугл?

PS2: надеюсь я изначальный вопрос понял правильно и не написал полной ерунды..

ZuBB ★★★★★
()
Последнее исправление: ZuBB (всего исправлений: 2)
Ответ на: комментарий от ymuv

Лучше использовать «join». Встречались случаи, когда объединение через «where» корректно обрабатывалось через раз. Да и запрос будет выглядеть куда более читаемым

anonymous
()

Join мне кажется будет лучше и уж не медленнее...

iRunix ★★★★
()
Ответ на: комментарий от anonymous

Эти случаи являются ошибками Вашего SQL-сервера. Эти две формы в SQL эквивалентны. Перечисление таблиц через запятую --- сокращённый вариант записи INNER JOIN. А вообще рекомендуется писать INNER JOIN вместо перечисления потому, что так лучше видно, по каким полям таблицы связываются, а в WHERE указывать условия, по которым происходит отбор: SELECT * FROM a INNER JOIN b ON a.id=b.id INNER JOIN c ON b.subid=c.subid WHERE a.somevalue='abc'

anonymous
()

Всегда пишу JOIN, оно и нагляднее будет - видно поля, по которым связываются таблицы.

unC0Rr ★★★★★
()

Вопрос: будет ли быстрее работать запрос если использовать не сравнение(where) а join?

Нет.

no-dashi ★★★★★
()

наверное, зависит от реализации и конкретного сервера. Но вообще разницы не должно быть

Harald ★★★★★
()
26 мая 2013 г.
Ответ на: комментарий от anonymous

Перечисление таблиц через запятую --- сокращённый вариант записи INNER JOIN.

А не CROSS JOIN ли, а?

d_Artagnan ★★
()
Последнее исправление: d_Artagnan (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.