Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Производительность: JOIN vs WHERE

20.11.2012, 00:42. Показов 2821. Ответов 0
Метки нет (Все метки)

Есть бд студентов, нужно выбрать студентов живущих в общежитии. Возникло два варианта как это сделать: используя where или используя join'ы.
Схема таблицы:


Вариант 1:
SQL
1
2
3
4
5
6
7
8
9
10
-- Вывести на экран Ф.И.О. (фамилию – полностью, имя и отчество – сокращенно) всех студентов, живущих в общежитии.
DECLARE
    @dnepr SMALLINT = (SELECT CityID FROM City WHERE Город='Киев'),
    @kazakova SMALLINT = (SELECT StreetID FROM Street WHERE Улица = 'Васнецова'),
    @homeNome SMALLINT = 38
 
SELECT (Фамилия + ' ' + CAST(Имя AS CHAR(1)) + '. '+ CAST(Отчество AS CHAR(1)) + '.') AS [Ф.И.О.]
    FROM(SELECT AddressID FROM Address
        WHERE StreetID = @kazakova AND CityID = @dnepr AND Дом=@homeNome) hostels
    JOIN Person ON Person.AddressID=hostels.AddressID
Схема выполнения запроса


Вариант 2:
SQL
1
2
3
4
5
6
7
8
SELECT (Фамилия + ' ' + CAST(Имя AS CHAR(1)) + '. ' + CAST(Отчество AS CHAR(1)) + '.') AS [Ф. И. О.]
FROM Person
  JOIN Address ON Person.AddressID = Address.AddressID
  JOIN City    ON City.CityID = Address.CityID
  JOIN Street  ON Street.StreetID = Address.StreetID
WHERE  Город = 'Киев'
  AND Улица = 'Васнецова'
  AND Дом = 38
Схема выполнения запроса


Какой же запрос лучше? Ато в плане выполнения нельзя предполагаемое время посмотреть, а после выполнения оно пишет 0.00 так что непонятно что быстрее срабатвыает. Также мне интересно что лучше с точки зрения производительности использовать cast AS char(1) или выделять первый символ с помощью substr?

Добавлено через 4 минуты
Блин, я поздно открыл для себя вкладку "статистика клиента" где оказывается пишется ещё и время выполнения (правда непонятно по какому признаку и для какого предположительного количества данных).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2012, 00:42
Ответы с готовыми решениями:

Производительность LEFT JOIN при разном числе колонок
Подскажите можно ли както сгладить этот эффект. вот две таблицы, в одно ключи от другой но не в...

Не выполняется код PHP. Warning: join() [function.join]: Invalid arguments passed
Помогите разобраться в коде <?php $text = file_get_contents('input.txt'); ...

Ошибка: no matching function for call to 'QStringList::join()' file.write(lines.join();
почему возникает эта ошибка? у меня в qt creator-е автодополнение показывает что есть такой метод...

Как записать Left Join (Right Join) при помощи Linq, используя fluent-синтаксис
Как записать Left Join (Right Join) при помощи Linq используя fluent - синтаксис? У меня есть...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2012, 00:42

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

JOIN (или не JOIN?) - показать все записи только левой таблицы, дополнив значениями правой
Хочу вывести все записи одной таблицы, дополнив данными из других таблиц. При этом записи других...

Разница между выражениями с join и без join
Вот это: SELECT o.OrderID, o.OrderDate, c.CustomerName FROM Customers AS c, Orders AS o WHERE...

Запросы RIGHT JOIN и LEFT JOIN в чём различие?
Добрый день! Чем отличаются запросы RIGHT JOIN и LEFT JOIN, если они выдают один и тот же результат?

Переделать запрос LEFT JOIN -> INNER JOIN
Доброго времени суток, помогите переделать запрос с использованием LEFT JOIN на INNER JOIN ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.