2017-04-02 81 views
0

我正在使用表格加入子查詢。INNER JOIN花費更長的時間

子查詢運行5秒(返回20條記錄),表只有4行。

子查詢:

Select ID, Name, JoinID 
FROM tableX 
JOIN .. 

子查詢樣品結果:

1, xx, 1 
2, yy, 2 
3, zz, 1 
4, vv, 2 
5, bb, 1 

TableY(ID,說明): 數據

1, test1 
2, test2 
3, test3 
4, test4 

我下面查詢花費超過30秒。我在這裏做錯了什麼?我看到表統計沒有問題。此外,子查詢不返回JoinID列的任何NULL記錄。

Select sub.*, tab.* 
from 
(
sub query 
) sub 
Join tableY on tableY.ID = sub.JoinID 
+2

與查詢性能相關的問題應該包括執行計劃等 – GurV

+0

表中是否有索引 – TriV

回答

0

在某些情況下加入子查詢會很慢。如果您的表沒有PK或FK索引,那麼對於數據庫引擎而言,連接將會很複雜。

首先檢查你的表格。如果你沒有,將主鍵添加到ID列。在TABLEX的JOINID上創建外鍵。如果你已經完成了相同的結果,那麼你必須在JOINID上創建索引,如果這不起作用,那麼你必須檢查你的服務器配置,檢查數據庫引擎文檔(Oracle,Mssql,MySQL等)。

你可以使用這個SQL語句得到相同的結果,而無需使用子查詢,

SELECT X.*, Y.* 
FROM TABLEX as X 
JOIN TABLEX as Y ON (X.JOIN_ID=Y.ID) 

使用子查詢,如果你有聚合函數或子查詢的SQL語句的多個連接。

+0

這些表是不同的。已經編輯了表名。 – par181

+0

好吧,我可以看到你有你的子查詢中的一個表。我們不使用這樣的子查詢。我編輯了我的答案,請檢查並嘗試,讓我知道它是否有效 – EceL