簡體   English   中英

SQL (HFSQL):如果 WHERE 子句,INNER JOIN 在性能上不是對稱的?

[英]SQL (HFSQL) : INNER JOIN not symetric in performances if WHERE clause?

我有一個基本的 HFSQL 數據庫,有 3 個表:Company、Person 和 Worker。 每個表有約 5 列和 5000 個條目。 Worker 有一個名為 IDPerson 的人的外鍵,以及一個名為 IDCompany 的實體的外鍵。

我測試了以下 2 個查詢(我只更改了 INNER JOIN 的順序):

QUERY 1(~5ms 執行時間)

SELECT *
FROM Person
INNER JOIN Worker ON Worker .IDPerson = Person.IDPerson
WHERE Worker.Company = 1;

QUERY 2( ~50ms 執行時間

SELECT *
FROM Worker
INNER JOIN Person ON Worker .IDPerson = Person.IDPerson
WHERE Worker.Company = 1;

找到的條目數相同,但執行時間慢了 10 倍。 為什么? INNER JOIN 不應該是對稱的嗎? 為什么在使用 WHERE 子句時,訂單的性能會提高 10 倍?

請幫助我理解這種奇怪的行為!

PS:如果我只 select 一些列而不是“”*,性能問題是相同的

即使您需要所有列,也最好將它們命名為 select 而不是使用“*”。 這背后的原因是讓數據庫知道你想要什么,而不是收集所有東西(即使你正在收集所有東西)。

如果您 select 只有幾列,那么您是在告訴數據庫您知道要提取的內容,因此它只會查找特定列,而不是通過“幕后查詢”來獲取所有列。

至於你兩個join之間的性能差異,數據庫使用大量計算來確定最佳執行計划,它會尋找要使用的索引,如果你之前運行過查詢,緩存也會有這樣的影響。

測試時毫不猶豫地使用一些東西來清除緩存(它可能會產生相當大的影響)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM