2013-07-04 92 views
0

如果我使用'有'作爲'Where'(即沒有group by子句), 您能告訴我哪一個更快'Where'或'Having(as where)'嗎? 我們不得不選擇哪一個?有OR哪裏,哪個性能更快?

情景 - 我正在使用此條件查找使用經度和緯度的特定距離的位置。

+1

其實你可以做你自己的基準。 –

+1

你實際使用的是什麼RDBMS? 「HAVING」和「WHERE」通常不可互換,因爲「HAVING」適用於組和行上的「WHERE」。 –

+0

如果我們刪除'group by'子句讓它像Where一樣工作。這意味着兩個查詢都會得到相同的結果。所以我的問題是哪一個更快? – Abhi

回答

4

如果某個條件引用了aggregate函數,請將該條件置於HAVING子句中。否則,請使用WHERE子句。

您可以使用HAVING,但建議您應該使用GROUP BY

SQL Standard表示WHERE在返回行之前限制結果集,HAVING限制帶來所有行後的結果集。所以WHERE更快。

+0

「除非您還使用GROUP BY,否則不能使用HAVING。」 - 我不這麼認爲。我們可以使用沒有'分組'。但我想我在你的最後一句話中得到了答案。 – Abhi

+0

@Abhi,但推薦使用'Group By' – Amit

+0

實際上有兩種情況使用lat和long來找到附近的位置。在一個 - 我們正在計算從源到目的地的距離。在這種情況下,我只是把'擁有dist> 200'。但是還有一種方法可以獲得緯度和長距離,這裏如果我們在'lat> = lat_calucated和lng <= lng_calucated中傳遞它。它給出了相同的結果。這就是我提出上述問題的原因。我必須選擇哪一個? – Abhi

0

使用HAVING和WHERE不可互換。它們涵蓋不同的主題,HAVING如果沒有GROUP BY句

+0

http://blog.sqlauthority.com/2007/07/04/sql-server-definition-comparison-and-difference -between-having-and-where-clause勾選此項。如果你不使用'group by','Having'將會像'Where'那樣工作。 – Abhi

+0

是的,就是我說的 –

+0

性能明智哪一個我不得不喜歡? – Abhi