Sql-Server

選擇 * - 為什麼或為什麼不?

  • October 7, 2021

這兩個查詢之間真的有什麼區別嗎?

SELECT TOP 1000 [COL_1], [COL_2], [...], [COL_n] FROM [database].[schema].[table]
SELECT TOP 1000 * FROM [database].[schema].[table]

顯然,如果我編寫這樣的程式碼,我將在未來產生問題,但如果我真的需要查看我的臨時 SSMS 查詢視窗中的所有列,這有關係嗎?我嘗試比較查詢計劃,但沒有發現兩者之間的差異。

編輯: MakeN的比賽,因為SELECT 1vsSELECT 1000不是這個問題的重點。此外,建議的文章簡要提到使用SELECT *

我只將它與臨時廢料查詢一起使用,通常是在學習對象的模式時

但這個問題集中在持久的程式碼上。我的問題範圍僅限於不會超過目前 SSMS 會話的臨時聲明。

在我的臨時 SSMS 查詢視窗中,這有關係嗎?

在這種情況下,不,沒關係。但是SELECT *無論如何不要使用是一個好習慣,以減少將此類查詢懶惰地複製到用於生產的程式碼中的誘惑。

為免生疑問:雖然通過 SSMS 或類似工具進行快速檢查/診斷是完全可以接受的,但由於其他地方有詳細記錄的原因,您應該SELECT *盡可能避免在生產程式碼中使用。

這表明“在 SSMS 中沒問題”的一個重要例外SELECT *:如果您正在試驗 TSQL,它最終會在其他地方的程式碼中永久化,那麼SELECT *無論如何您都需要使用非版本進行測試,因為您可能會遇到一個邊緣情況,從而製定出意料之外的計劃/performance 兩者之間的差異,因此您最好先不做,SELECT *而不是以後為自己做更多的工作。

我嘗試比較查詢計劃,但沒有發現兩者之間的差異。

如果您選擇了所有列,那麼SELECT *無論如何都會擴展到相同的查詢中,因此計劃始終相同。

引用自:https://dba.stackexchange.com/questions/300739