Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какой SELECT быстрее? / 9 сообщений из 9, страница 1 из 1
18.07.2002, 13:21:42
    #32037439
rmn_itam
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Имею два варианта селекта:

SELECT *
FROM dbo.Models
WHERE Model IN
(SELECT Model
FROM Models_Users
WHERE Users = USER)

и

SELECT *
FROM dbo.Models
WHERE EXISTS
(SELECT *
FROM Models_Users
WHERE Models.Model=Models_Users.Model and Models_Users.Users = USER)

Какой вариант в принципе быстрее?
Роман
...
Рейтинг: 0 / 0
18.07.2002, 13:33:06
    #32037442
Panov Vitaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
В принципе быстрее селект без вложенного подзапроса.

Предлагаю что-то типа этого (работает точно быстрее):

SELECT
MS.*
FROM
dbo.Models MS inner join Models_Users MU
WHERE
MU.Users = USER
...
Рейтинг: 0 / 0
18.07.2002, 13:43:24
    #32037447
rmn_itam
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Я с join пока не использовал, поскольку нет опыта. Нельзя ли без непонятностей переписать этот код?

SELECT
MS.*
FROM
dbo.Models MS inner join Models_Users MU
WHERE
MU.Users = USER

Спасибо, Роман
...
Рейтинг: 0 / 0
18.07.2002, 13:50:17
    #32037449
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Вообще с exists должно быть быстрее

А написать можно так:

SELECT *
FROM Models M
WHERE EXISTS
(SELECT *
FROM Models_Users MU
WHERE M.Model=MU.Model and MU.Users = USER)

Можно и через join, но есть разница: в первом случае будут показаны все записи по 1 разу , которые имеются по условию в Models_Users, а во втором случае будет показано столько записей, сколько раз они входят в Models_Users
...
Рейтинг: 0 / 0
18.07.2002, 14:27:51
    #32037462
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
SELECT *
FROM Models M
WHERE EXISTS
(SELECT TOP 1 *
FROM Models_Users MU
WHERE M.Model=MU.Model and MU.Users = USER)
...
Рейтинг: 0 / 0
18.07.2002, 14:56:03
    #32037470
Panov Vitaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Да действительно:
тогда предлагаю еще впереди distinct поставить:


SELECT
DISTINCT MS.*
FROM
dbo.Models MS inner join Models_Users MU
on (MS.Model=MU.Model)
WHERE
MU.Users = USER
...
Рейтинг: 0 / 0
18.07.2002, 15:25:52
    #32037483
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
SELECT
DISTINCT MS.*
FROM
dbo.Models MS , Models_Users MU
WHERE
MU.Users = USER AND MS.Model=MU.Model
самый быстрый.... если заведомо известно что результат 1
то TOP 1 еще быстрее....
и именно так... и только в случае inner join...
where бытрее joina
...
Рейтинг: 0 / 0
18.07.2002, 16:25:24
    #32037497
Delta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Microsoft не рекомендует пользоваться подзапросами, лучше использовать join. А еще лучше - merge join.
...
Рейтинг: 0 / 0
18.07.2002, 16:37:45
    #32037503
Alexander_Chepack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой SELECT быстрее?
Вообще-то EXISTS и JOIN возвращают разные результаты (в общем случае). EXISTS *не увеличивает* количество возвращенных записей, а вот JOIN вполне может вернуть больше записей, чем их было в таблице (из-за отношения 1:M). Так что все определяется логикой приложения - а вот между IN и EXISTS я обычно выбираю EXISTS, как более универсальную конструкцию.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какой SELECT быстрее? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]