Left Join與Sub Query是否存在效能差異? | SQL

Posted by: Max Chen | in FUN | 1 week, 5 days ago |

答案是 : Yes!

試看這兩個查詢:

SELECT a.item
FROM b
LEFT JOIN a ON b.id = a.id

SELECT (
        SELECT item
        FROM a
        WHERE id = b.id
        )
FROM b

兩著之間有效能差異嗎?

兩個查詢之間確實存在效能差異:

  1. 第一個查詢是一個左連接(left join),它使用「on」子句根據 b 表中的 id 欄位與 a 表中的 id 欄位進行連接。這個查詢會返回 b 表的所有行,並與符合連接條件的 a 表的行進行匹配。如果在 a 表中找不到符合的行,那麼對應的 a.item 將為空(NULL)。

  2. 第二個查詢使用了子查詢(subquery),它在每一行中都執行一次子查詢,根據 b.id 的值從 a 表中選擇對應的 item。這個查詢會返回 b 表的所有行,並在每一行中執行一次子查詢以獲取對應的 item。如果在 a 表中找不到對應的行,那麼子查詢的結果將為空(NULL)。

在效能方面,第一個查詢通常比第二個查詢效能更好。原因如下:

  1. 查詢計劃優化:大多數關聯式資料庫管理系統(RDBMS)可以優化連接操作,以提高效能。對於左連接,資料庫可以根據索引和統計資訊選擇最佳的連接策略。而在第二個查詢中,每一行都需要執行一次子查詢,這可能會導致重複的工作和額外的開銷。

  2. 數據傳輸量:第一個查詢只需要返回 b 表和 a 表匹配的行,而第二個查詢需要將整個 b 表的數據傳輸到子查詢中。如果 b 表很大,這將導致額外的數據傳輸和處理開銷。

總結來說,Left Join通常比使用子查詢的方式更有效率,特別是在處理大型資料集時。

然而,實際的效能差異還取決於資料庫的實現方式、索引設計和資料量等因素。在進行效能優化時,建議使用工具和技術來分析和測試實際情況,以確定最佳的查詢方式。

但話又說回來,效能比較差並不一定代表這種方法不好,如果效能可接受,通常Sub Query的方式對於大型複雜的SQL會比較好維護,所以至於好壞,it depends on the situation!

Currently unrated
 or 

Subscribe

* indicates required

Recent Posts

Archive

2023
2022
2021

Categories

Apache 1

Data Science 2

Dbfit 1

Design Pattern 1

Devops 4

DigitalOcean 1

Django 1

English 3

Excel 5

FUN 4

Flask 3

Git 1

HackMD 1

Heroku 1

Html/Css 1

Linux 4

MDX 1

Machine Learning 2

Manufacture 1

Master Data Service 1

Mezzanine 18

Oracle 1

Postgresql 7

PowerBI 4

Powershell 4

Python 22

SEO 2

SQL Server 53

SQL Server Analytics Service 1

SQLite 1

Windows 1

database 8

work-experience 1

其他 1

投資入門 1

投資心得 2

時間管理 1

總體經濟 2

自我成長 3

資料工程 1

Tags

SEO(1) Github(2) Title Tag(2) ML(1) 李宏毅(1) SQL Server(18) Tempdb(1) SSMS(1) Windows(1) 自我成長(2) Excel(1) python Flask(1) python(5) Flask(2)

Authors

Max Chen (159)

Feeds

RSS / Atom

Left Join與Sub Query是否存在效能差異? | SQL

© COPYRIGHT 2011-2022. Max的文藝復興. ALL RIGHT RESERVED.