2014-03-09 6 views
0

Я использую левое соединение, чтобы проверить, сохранены ли определенные типы данных в базе данных.Эффективность левого соединения при использовании IS NULL

Мне интересно, будет ли потрачено много ресурсов, если объединенная таблица содержит много строк, которые соответствуют предложению JOIN.

т.е .:

SELECT Applications.* 
FROM Applications 
LEFT JOIN SomeFeatureRows ON (SomeFeatureRows.ApplicationId = Applications.Id) 
WHERE SomeFeatureRows.Id IS NULL; 

ли сканировать БД через все строки в SomeFeatureRows, чтобы увидеть, если есть строка, где находится IdNULL?

Я просто хочу проверить, есть ли строка или нет в этой таблице (с указанным идентификатором приложения).

Edit, могли бы также включать реальное утверждение SQL:

SELECT organizations.id AS OrganizationId, 
     organizations.Name, 
     Application.Id as ApplicationId, 
     Application.Name as ApplicationName, 
     Account.id  AS AccountId, 
     Account.Email, 
     Account.Username , 
     SentEmails. SentAtUtc 
FROM organizations 
     INNER JOIN applications ON (organizations.id = applications.organizationid) 
     LEFT JOIN Incidents ON (organizations.id = Incidents.organizationid) 
     LEFT JOIN SentEmails ON (organizations.id = SentEmails.organizationid AND EmailTypeName = 'IncidentsReminder') 
     CROSS apply (SELECT accounts.id, 
          accounts.email, 
          accounts.username 
        FROM accounts, 
          organizationmembers 
        WHERE accounts.id = organizationmembers.accountid 
          AND organizationmembers.organizationid = 
           organizations.id) 
     Account 
WHERE Incidents.id IS NULL 

ответ

1

Here это очень хорошая статья, объясняя различные методы и преимущества производительности с помощью: Not Exists vs. Not In против Left join/Is null

Подводя итог:
LEFT JOIN/IS NULL менее эффективен, так как он не пытается пропустить уже согласованные значения в правой таблице , возвращая все результаты и отфильтровывая их. Используйте Not Exists для лучшей производительности, так как в плане выполнения он создаст LEFT ANTI SEMI JOIN.

+0

Не забывайте, что вы можете проверить план выполнения, чтобы узнать, что произойдет. –

Смежные вопросы