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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой SQL-запрос работает лучше, и почему? 
:(
    Опции темы
Pankon
Дата 10.5.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

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



Какой SQL-запрос работает лучше(быстрее) и почему smile 
Первый
Код
SELECT Tabelle1.ID, Tabelle2.Text
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.ID;
Второй
Код
SELECT Tabelle1.ID, Tabelle2.Text
FROM Tabelle1,Tabelle2 
WHERE Tabelle1.ID = Tabelle2.ID;
 
PM MAIL   Вверх
Darhazer
Дата 10.5.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

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



Запроси в общем одинаковие smile Просто во втором INNER JOIN неявний 


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Akina
Дата 10.5.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Первый лучше и быстрее. Особенно если поля связи индексированы. Ибо в первом случае связывание, а во втором - декартово произведение. 


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

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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 6
Всего: 35



Akina, ты не прав.
Это два идентичных запроса.
Первый соотвествует более позднему стандарту.
Второй, если я не ошибаюсь - стандарт SQL92
 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
chief39
Дата 10.5.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(boevik @  10.5.2006,  18:05 Найти цитируемый пост)
Akina, ты не прав.
Это два идентичных запроса.
Первый соотвествует более позднему стандарту.
Второй, если я не ошибаюсь - стандарт SQL92

Угу. Ограничение будет накладываться сразу, декартова взрыва не будет.
Когда вовсю работал с СКЛ - везде использовали только такую запись.
ИМХО, она удобнее. 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Pankon
Дата 10.5.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

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



Что означает
Цитата(Darhazer @  10.5.2006,  17:14 Найти цитируемый пост)
INNER JOIN неявний  

 smile

Добавлено @ 18:51 
Цитата(chief39 @  10.5.2006,  18:47 Найти цитируемый пост)
Ограничение будет накладываться сразу
Это о первом запросе или о втором?

Цитата(chief39 @  10.5.2006,  18:47 Найти цитируемый пост)
использовали только такую запись
Первую или вторую?


 
PM MAIL   Вверх
chief39
Дата 19.5.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Pankon @  10.5.2006,  18:48 Найти цитируемый пост)
Первую или вторую?

Вторую

Неявный иннер джойн - это значит что нету ключевых слов inner join
Но функциональность АБСОЛЮТНО та же.  И способ выполнения и последовательность действий на сервере та же, что и в первом запросе.

Сначала связка таблиц по этому условию, а потом уже выборка результирующего набора 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Mephisto
Дата 26.6.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Я почему-то склонен к ответу Akina'ы. smile 
Протестил на своей базе (несколько млн записей) join разрулил быстрее,  хоть и не на много. В среднем 0,8 с.
Вообще сам использую Outer join и вообще исключительно join'ы. Синаксис мне их понятней. Да и ошибки проще избежать как в синтаксисе, так и с Null'ами!!!!! 
PM   Вверх
chief39
Дата 26.6.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Mephisto @  26.6.2006,  11:14 Найти цитируемый пост)
Протестил на своей базе (несколько млн записей) join разрулил быстрее,  хоть и не на много. В среднем 0,8 с.


А время выполнения запроса? как первого так и второго?

Если 0,8 - это один процент от времени выполнения запроса  + тест был только один - списываем на статистическую погрешность. 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
ТоляМБА
Дата 26.6.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

Репутация: 5
Всего: 252



В плане чисто привычки по-моему лучше использовать Inner Join. А ну как тебе потом придётся не только Inner?, но и Left (Right) Join использовать и сиди смотри на запросы тама Where для условия, а тута для связывания. Во запарка-то будет! 
PM   Вверх
Mephisto
Дата 26.6.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(chief39 @  26.6.2006,  11:57 Найти цитируемый пост)
А время выполнения запроса? как первого так и второго?

В промежутке между 1,5 - 2 с. +разница между запросами.

По сути это те же яйца, только в профиль. Эсновная проблема в этом!

Добавлено @ 13:22 
Цитата(ТоляМБА @  26.6.2006,  12:20 Найти цитируемый пост)
В плане чисто привычки по-моему лучше использовать Inner Join. А ну как тебе потом придётся не только Inner?, но и Left (Right) Join использовать и сиди смотри на запросы тама Where для условия, а тута для связывания. Во запарка-то будет!  

Именно! 
PM   Вверх
Akina
Дата 26.6.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ТоляМБА @  26.6.2006,  14:20 Найти цитируемый пост)
сиди смотри на запросы тама Where для условия, а тута для связывания

В случае JOIN-ов WHERE - для условий отбора, а для связывания - ON. Меньше мест для ляпов. 


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

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



Цитата(Akina @  26.6.2006,  14:30 Найти цитируемый пост)
Меньше мест для ляпов.  

Это во-первых.
Второе , where  может быть неявно преобразован в join (завист от БД). 
PM MAIL   Вверх
chief39
Дата 26.6.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(ТоляМБА @  26.6.2006,  13:20 Найти цитируемый пост)
А ну как тебе потом придётся не только Inner?, но и Left (Right) Join использовать

Нууу... приходилось. Первые строки - связка, следующие - условия отбора.
В компании, где работал ранее, всё было написано именно в такой форме.
И все охотно пользовались.
Довольно удобно и читабельно. Прочитал какие ьалицы, представил себе, накидал связки мысленно, отобрал по остальным условиям.

Ну да это дело привычки. smile


Цитата(Mephisto @  26.6.2006,  13:21 Найти цитируемый пост)
Эсновная проблема в этом!

Ту проблема в том, что человек не знал ничего о "левых-правых" запросах. А не в форме записи.
Если человек не может написать ничего о бурильных технологиях, а ему дают готовую подсказку на английском - это не значит что английский лучше -  это означает что ОН ПРОСТО НЕ ЗНАЕТ. Можно было с таким же успехом и на русском подсказать.


 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Mephisto
Дата 26.6.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(chief39 @  26.6.2006,  13:50 Найти цитируемый пост)
Ту проблема в том, что человек не знал ничего о "левых-правых" запросах. А не в форме записи.
Если человек не может написать ничего о бурильных технологиях, а ему дают готовую подсказку на английском - это не значит что английский лучше -  это означает что ОН ПРОСТО НЕ ЗНАЕТ. Можно было с таким же успехом и на русском подсказать.

Зачет.  smile 

1 вариант ИМХО рулит. В случае потери данных сразу видно ошибку в слове Inner. smile 
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




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


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

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