2014-10-07 91 views
0

我試圖評估邏輯及以下2個查詢的性能。我認爲它們是相同的,但訪問圖顯示不同的路徑和顯着不同的性能。有人可以解釋一下,如果這些在邏輯上相同?是SQL左外連接等價於「不在」選擇查詢?

select f.folderId FOLDERS_TO_DEL from store.Folders f 
    where f.ownerUserId not in (select u.userId from store.users u); 


select f.folderId FOLDERS_TO_DEL from store.Folders f LEFT JOIN 
    store.Users u ON f.ownerUserId=u.userId WHERE u.userId IS NULL; 

編輯:我想補充一點,在我的例子中,所有的ID字段都是不可空的。

回答

3

沒有,如果有任一Folders.ownerUserIdUsers.userId空值,他們的行爲在相當不同的方式。

A simple SQLfiddle demo with a null in ownerUserId

+0

感謝,我忘了補充一點,所有的ID字段不可爲空 – Marcin 2014-10-07 04:48:44

+0

@Marcin如果所涉及的領域都是非空的,他們會給出相同的結果(但正如你所看到的不一定是相同的查詢計劃) – 2014-10-07 06:22:29