Модераторы: 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   Вверх
chief39
Дата 26.6.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Mephisto @  26.6.2006,  16:11 Найти цитируемый пост)
1 вариант ИМХО рулит. В случае потери данных сразу видно ошибку в слове Inner. 

Всё рулит smile

У меня знакомый - обожает паскаль. И все синтаксисы, похожие на паскальный.

Я - терпеть не могу. Лаконичность си гораздо гораздей smile (для меня)

Мы решили этот вопрос. Я не суюсь в паскаль, он не обсуждает си и си-производные smile))

Вобщем, пошли религиозные войны уже smile))

Каждому своё. Шатенки, брюнетки, блондинки...
smile 


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

PM MAIL   Вверх
LSD
Дата 27.6.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

Репутация: 24
Всего: 538



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

1. Тут дело может быть во времени работы оптимизатора и парсинга запроса.
2. Корректнее всего будет сравнить планы запросов. Например оптимизатор Oracle выдал абсолютно одинаковые планы, на оба этих запроса. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chief39
Дата 29.6.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Mephisto @  26.6.2006,  13:21 Найти цитируемый пост)
В промежутке между 1,5 - 2 с. +разница между запросами.


Цитата(LSD @  27.6.2006,  22:08 Найти цитируемый пост)

1. Тут дело может быть во времени работы оптимизатора и парсинга запроса.
2. Корректнее всего будет сравнить планы запросов. Например оптимизатор Oracle выдал абсолютно одинаковые планы, на оба этих запроса.  


По идее, неплохо бы прогнать несколько десятков раз на препаред стэйтмент и сравнить средние значения smile 


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

PM MAIL   Вверх
Sqlninja
Дата 1.7.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

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



Это какое-то гониво насчет какой запрос быстрее работает. Все равно парсер каждого сервака приводит запрос к единому виду. И план выполнения у них одинаковый. А нотация без разницы - например на оракле начиная с 9ки поддерживаются всякие джойны, только для того чтобы ANSI соответствовать. А на перформанс это вообще никак не влияет по ходу. 


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
Mephisto
Дата 10.7.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(LSD @  27.6.2006,  21:08 Найти цитируемый пост)
Корректнее всего будет сравнить планы запросов. Например оптимизатор Oracle выдал абсолютно одинаковые планы, на оба этих запроса.  

Гы. Верно. 
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

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

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

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

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


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

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

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

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

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


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

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


 




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


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

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