|
Тема |
Re: Принципен въпрос...ама много принципен [re: voyager] |
|
Автор |
salle (Един такъв) |
|
Публикувано | 15.08.02 18:57 |
|
|
Цитирам Торбалан
"join-ването на таблици, които нямат нищо общо едва ли има някакъв смисъл"
Или по-точно има две възможности
1. Няма никакъв смисъл
2. Таблиците ти всъщност имат нещо общо, но .... само в главата ти
т.е. ти имаш нещо конкретно предвид за връзката на е те точно тия редове от двете таблици, но не си го "превел" в SQL терминология
Ако е 1. тогава решението е очевидно - UNION
а именно:
SELECT name FROM table1 WHERE id=5
UNION [ALL]
SELECT name FROM table2 WHERE id=7
ALL - в зависимост от това дали искаш да избегнеш повторенията или не.
Всъщност това е 1 заявка по отношение на връзка, трансфер на данни и други и 2 заявки по отношение на оптимизацията.
Каквото и както и да правиш това е оптималния вариант. Мога да се хвана на бас ей тъй както си размишлявам, че всеки сървър ще върне резултата от UNION по-бързо от две отделни заявки да не говорим пък за JOIN.
Защо JOIN няма смисъл? Ами защото сървъра е в пълното си право да оптимизира заявката както намери за добре и може да "намери" за добре първо да направи JOIN-а т.е. декартовото произведение на двете таблици пък чак тогава да филтрира само тези редове дето ги искаш .... нали се сещаш какво ще се получи
За съжаление бързата проба която направих под MySQL показа, че и в трите случая времето е около 0.01 - 0.02 sec което изобщо не е показателно
двете таблици имаха съответно
3524578
и
4870847
реда
|
| |
|
|
|