powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какой SELECT быстрее?
9 сообщений из 9, страница 1 из 1
Какой SELECT быстрее?
    #32037439
rmn_itam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею два варианта селекта:

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
Какой SELECT быстрее?
    #32037442
Panov Vitaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе быстрее селект без вложенного подзапроса.

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

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

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

Спасибо, Роман
...
Рейтинг: 0 / 0
Какой SELECT быстрее?
    #32037449
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще с 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
Какой SELECT быстрее?
    #32037462
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT *
FROM Models M
WHERE EXISTS
(SELECT TOP 1 *
FROM Models_Users MU
WHERE M.Model=MU.Model and MU.Users = USER)
...
Рейтинг: 0 / 0
Какой SELECT быстрее?
    #32037470
Panov Vitaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да действительно:
тогда предлагаю еще впереди distinct поставить:


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


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