Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Select * FROM t1, t2 ... или LEFT JOIN ? Что быстр 
:(
    Опции темы
gcc
Дата 19.8.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



Код

SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,
                                 dbmail_users AS t2
                             WHERE t1.session = ?
                             AND t1.user_to = t2.user_idnr
                             LIMIT 1



Код


SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,                                 
                     INNER JOIN dbmail_users AS t2
                              ON  t1.user_to = t2.user_idnr
                             WHERE t1.session = ?
                             LIMIT 1


это без разницы абсолютно

а если так:

тоже?

Код


SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,                                 
                     INNER JOIN dbmail_users AS t2
                              ON  t1.user_to = t2.user_idnr
                             AND t1.session = ?
                             LIMIT 1



PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 19.8.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



забыл сказать, что тестировать нету времени, надо чтобы уже всё завтра или после завтра работало  smile 

(если бы было времято протестировал бы всё)
PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 19.8.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



gcc, для меня всегда LIMIT без ORDER BY был загадкой... пофиг что, лишь бы с ног валило? ... но это так, в качестве оффтопа.

Запрос, кроме корректности и валидности, должен быть ещё и читаем (т.е. сопровождаем). Третий вариант явно не катит, а из двух первых выбирай любой. Индексы в данном случае важнее формы запроса.

PS. Счас вроде в политике развития SQL есть движуха от связи к отбору... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 27.8.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 3
Всего: 161



Цитата(DimW @  19.8.2009,  15:44 Найти цитируемый пост)
есно говоря я и сам до последнего не верил что получится,

Я тоже не поверил, перепроверять пришлось smile Оракля меня тоже удивил переписав третий запрос на иннер джойн
Цитата(DimW @  19.8.2009,  15:09 Найти цитируемый пост)
из преведенных планов видно

Не так уж и видно этого из приведенных, ну разве что если уж очень наметанным глазом смотреть. У меня не такой. Я созерцая твой план долго вспоминал, умеет ли оракля фильтр совмещать c NL (как он это делаяет для FTS), а то что NL и NL OUTER это суть разные опарации, вообще для мея открытием сталоsmile я полагал что это одна операция, но разные предикаты доступа

Прости уж за буквоедство мне кажется так лучше видно будет
План когда оракля смог одуплить что третий запрос эквивалентен inner:
Код

SQL> explain plan for select * from t1 left join t2 on t1.id =t2.id where t2.id is not null;

Îáúÿñíåíî.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------
Plan hash value: 3447058062

----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |   101K|  2574K|    26  (66)| 00:00:01 |
|   1 |  NESTED LOOPS      |       |   101K|  2574K|    26  (66)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| T2    |   101K|  1287K|    10  (10)| 00:00:01 |
|*  3 |   INDEX UNIQUE SCAN| T1$PK |     1 |    13 |     0   (0)| 00:00:01 |
----------------------------------------------------------------------------


PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("T1"."ID"="T2"."ID")

Note
-----
   - dynamic sampling used for this statement

19 ñòðîê âûáðàíî.


План, когда мы малость подзапутали ораклю, так чтобы он этого не одуплил:
Код

SQL> explain plan for select * from t1 left join t2 on t1.id =t2.id where to_char(t2.id) is not null;

Îáúÿñíåíî.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------
Plan hash value: 4183880694

-----------------------------------------------------------------------------
| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |       |   104K|  2656K|    26  (66)| 00:00:01 |
|*  1 |  FILTER             |       |       |       |            |          |
|   2 |   NESTED LOOPS OUTER|       |   104K|  2656K|    26  (66)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| T1    |   104K|  1328K|    10  (10)| 00:00:01 |
|*  4 |    INDEX UNIQUE SCAN| T2$PK |     1 |    13 |     0   (0)| 00:00:01 |
-----------------------------------------------------------------------------

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_CHAR("T2"."ID") IS NOT NULL)
   4 - access("T1"."ID"="T2"."ID"(+))

Note
-----
   - dynamic sampling used for this statement

21 ñòðîê âûáðàíî.



PS Сорри за оффтоп.

Добавлено @ 16:13
Цитата(gcc @  19.8.2009,  21:26 Найти цитируемый пост)
а если так:
тоже?

Если так то тоже. Но это плохой тон. Есть критерии объединения, они указываютя в конструкции join есть критерии отбора(фильтра),они указываются в конструкции where. В случае с inner join результаты соединения и филтрации совпадают и предикаты могут быть прописаны как в join кляузе так и в where, однако если критерии объединения спустить в where, то это может проканает как old style join, но описывать фильтр в join это обсфукация в чистом виде.

Это сообщение отредактировал(а) Zloxa - 28.8.2009, 09:05


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.8.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Zloxa @  27.8.2009,  16:06 Найти цитируемый пост)
Не так уж и видно этого из приведенных

да, полностию согласен - хотел минимизировать колличество ненужной инфы не в оракловой ветке smile
а я вот думаю куда ты запропостился, оракл смакуют, а от тебя ни слова. видимо сезон отпусков. 
вообще твои замечания и уточнения вселяют еще большую уверенность в моих выводах и догадках, СПАСИБО!

Добавлено через 6 минут и 26 секунд
Цитата(Zloxa @  27.8.2009,  16:06 Найти цитируемый пост)
для FTS

FTS это full table scan?
PM MAIL ICQ   Вверх
Zloxa
Дата 28.8.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 3
Всего: 161



Цитата(DimW @  28.8.2009,  08:40 Найти цитируемый пост)
FTS это full table scan? 

угу smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.8.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



ок, понял.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.