|
|
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Имею два варианта селекта: 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) Какой вариант в принципе быстрее? Роман ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:21:42 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
В принципе быстрее селект без вложенного подзапроса. Предлагаю что-то типа этого (работает точно быстрее): SELECT MS.* FROM dbo.Models MS inner join Models_Users MU WHERE MU.Users = USER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:33:06 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Я с join пока не использовал, поскольку нет опыта. Нельзя ли без непонятностей переписать этот код? SELECT MS.* FROM dbo.Models MS inner join Models_Users MU WHERE MU.Users = USER Спасибо, Роман ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:43:24 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Вообще с 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 13:50:17 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM Models M WHERE EXISTS (SELECT TOP 1 * FROM Models_Users MU WHERE M.Model=MU.Model and MU.Users = USER) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 14:27:51 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Да действительно: тогда предлагаю еще впереди distinct поставить: SELECT DISTINCT MS.* FROM dbo.Models MS inner join Models_Users MU on (MS.Model=MU.Model) WHERE MU.Users = USER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 14:56:03 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 15:25:52 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Microsoft не рекомендует пользоваться подзапросами, лучше использовать join. А еще лучше - merge join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 16:25:24 |
|
||
|
Какой SELECT быстрее?
|
|||
|---|---|---|---|
|
#18+
Вообще-то EXISTS и JOIN возвращают разные результаты (в общем случае). EXISTS *не увеличивает* количество возвращенных записей, а вот JOIN вполне может вернуть больше записей, чем их было в таблице (из-за отношения 1:M). Так что все определяется логикой приложения - а вот между IN и EXISTS я обычно выбираю EXISTS, как более универсальную конструкцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 16:37:45 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1821718]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 295ms |

| 0 / 0 |
