Очевидно "присоединиться" быстрее, чем "инлайн выберите запрос". Я проверил с 1000 строк. Вы также можете проверить. здесь приведен пример тестового кода.
CREATE TABLE [dbo].[tableA](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_tableA] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tableB](
[RowId] [int] IDENTITY(1,1) NOT NULL,
[Id] [int] NOT NULL,
[Designation] [nvarchar](100) NULL,
CONSTRAINT [PK_tableB] PRIMARY KEY CLUSTERED
(
[RowId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Declare @Min Int = 1
,@Max Int = 1000
While (@Min <= @Max)
Begin
Insert Into tableA(Name)
Select 'Name would be the name of - ' + Cast(@Min As Nvarchar(10))
Insert Into tableB(Id,Designation)
Select @Min
,'Desig could be the name of - Name' + Cast(@Min As Nvarchar(10))
Select @Min = @Min + 1
End
Первый взгляд @ рядный выберите запрос
-- inline query
Select a.Id
,a.Name
,(Select Designation From tableB As b Where b.Id = a.Id) As Designation
From tableA As a With (Nolock)
выход:
План выполнения:
теперь Регистрация запроса: -
---- join
Select a.Id
,a.Name
,b.Designation
From tableA As a With (Nolock)
Join tableB As b On a.Id = b.Id
план выполнения для запроса присоединиться: - вы можете увидеть четкую разницу.
УКАЗАТЬ ИСКЛЮЧИТЕЛЬНО на обоих и посмотреть, есть ли разница; там наверняка нет. –
'EXPLAIN' не является функцией Sql Server 2008. Вместо этого используйте 'SHOWPLAN' и' STATISTICS'. –
С точки зрения стиля, я всегда предпочитаю объединения. С точки зрения производительности, я почти всегда видел, как соединения выполняются быстрее. – UnhandledExcepSean