我有兩個表格,一個有60個lacs記錄作爲主數據。另一張表包含一些搜索條件。現在我需要做一個內部連接。我有兩個選擇。主數據內部連接條件或條件內部連接主數據。哪一個會證明更有效率?是內連接等價關係嗎?
換句話說,在一定的條件下,B可以證明B更有效嗎?
我有兩個表格,一個有60個lacs記錄作爲主數據。另一張表包含一些搜索條件。現在我需要做一個內部連接。我有兩個選擇。主數據內部連接條件或條件內部連接主數據。哪一個會證明更有效率?是內連接等價關係嗎?
換句話說,在一定的條件下,B可以證明B更有效嗎?
根據SQL標準,它們是等效的。實際上,數據庫引擎的查詢優化器可以自由地將其重寫爲更快運行的表單。
在我遇到的大多數數據庫引擎中,它們是完全等效的。
但是,如果您在談論OUTER JOIN的話,那麼左右排序是顯着的,不僅僅是出於性能的原因。
我檢查了一個內部聯接B和B內部聯接A.執行時間有很大差異。我怎麼能證明這一點?此外,搜索條件表是臨時表,A是內存表。 – harrisunderwork 2011-03-29 10:40:04
你能發佈您的查詢嗎?它在SQL Server中應該沒有區別。查詢優化器應該照顧它。 – 2011-03-29 10:42:59
由於公司SLA,我不能發佈任何代碼。但我會嘗試發佈一些小代碼。 – harrisunderwork 2011-03-29 11:06:05
JOIN
訂單並不重要,除非您在提示中明確提供FORCE ORDER
。
優化程序將選擇它認爲最合適的順序。
如果您在實際計劃中詢問連接順序,那麼是的,連接順序對於嵌套循環或散列連接而言絕對重要。
在嵌套循環的情況下,最裏面的表應該是較大的一個,最外面的應該是較小的一個。
在散列連接的情況下,探查表應該是較大的一個,散列的應該是較小的一個。
我猜「60 lacs」的意思是60十萬= 60 * 100.000,即600萬條記錄嗎? – 2011-03-29 10:24:47
是的,從印度的起源,我們幾乎不使用術語百萬:) – harrisunderwork 2011-03-29 10:38:44
哇。所以「lacs」(lakhs)是什麼!我一直很好奇! – 2011-03-29 10:42:16