|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
Как в линкю нормальный лефт джойн сделать? http://msdn.microsoft.com/ru-ru/library/bb397895.aspx отсюда var query = from person in people join pet in pets on person equals pet.Owner into gj from subpet in gj.DefaultIfEmpty() select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) }; Работает, но в профайлере указывается что выполняется лефт джойн, но не таблицы, а подзапроса. то есть person джоинится так примерно: people Left Join (select * From Owner) [t2] on условие Если просто сджойнить к таблице таблицу-справочник людей, и указать ему .DefaultIfEmpty() получается что-то вроде: INNER JOIN (( SELECT NULL AS [EMPTY] ) [t2] LEFT OUTER JOIN [dbo].[Owners] AS [t3] ON 1=1 ) ON [t0].[FK_Owners] = ([t3].[PK]) первый вариант работает, а второй не выбирает. --------------------------------------------------------- SET @@verSION = 'Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6002: Service Pack 2) ' ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 13:25 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
я хочу понять, как на линкье сделать запрос, чтобы вышло Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 13:26 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
Единственный недостаток LINQ - черезжопный left join... Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 13:46 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
Алексей КЕдинственный недостаток LINQ - черезжопный left join... Код: plaintext 1. 2. 3. 4.
там в профайлере видно, что джоинится с (Select * From t2) когда таблица маленькая - то ещё нормально, а когда там миллион записей, и нужно вытащить\или вернуть нулл только для одной записи - по производительности сильно бьёт! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 14:46 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
Erik_Kartmannтам в профайлере видно, что джоинится с (Select * From t2) когда таблица маленькая - то ещё нормально, а когда там миллион записей, и нужно вытащить\или вернуть нулл только для одной записи - по производительности сильно бьёт!Надо смотреть план выполнения и индексы. Наличие вложенного запроса ещё ничего не значит, причина тормозов не в нём. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2011, 11:14 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
А чего тут план выполнения запроса смотреть? невооружённым глазом видно, что юзер будет запрашивать миллион записей по сети. Ему только одну нужно, и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2011, 16:05 |
|
LINQ LEFT JOIN
|
|||
---|---|---|---|
#18+
Erik_KartmannА чего тут план выполнения запроса смотреть? невооружённым глазом видно, что юзер будет запрашивать миллион записей по сети. Ему только одну нужно, и всё.Напишите запрос так, чтобы возвращалось только то что нужно. Всё зависит от Вас. Или Вы и вправду думаете, что MSSQL, встретив вложенный запрос, сначала зачитает его весь во временную таблицу, и только потом будет джойнить? Это не так... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2011, 08:04 |
|
|
start [/forum/topic.php?fid=17&msg=37524096&tid=1350573]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 163ms |
0 / 0 |