Sql-Server
選擇 * - 為什麼或為什麼不?
這兩個查詢之間真的有什麼區別嗎?
SELECT TOP 1000 [COL_1], [COL_2], [...], [COL_n] FROM [database].[schema].[table]
SELECT TOP 1000 * FROM [database].[schema].[table]
顯然,如果我編寫這樣的程式碼,我將在未來產生問題,但如果我真的需要查看我的臨時 SSMS 查詢視窗中的所有列,這有關係嗎?我嘗試比較查詢計劃,但沒有發現兩者之間的差異。
編輯: Make
N
的比賽,因為SELECT 1
vsSELECT 1000
不是這個問題的重點。此外,建議的文章簡要提到使用SELECT *
:我只將它與臨時廢料查詢一起使用,通常是在學習對象的模式時
但這個問題集中在持久的程式碼上。我的問題範圍僅限於不會超過目前 SSMS 會話的臨時聲明。
在我的臨時 SSMS 查詢視窗中,這有關係嗎?
在這種情況下,不,沒關係。但是
SELECT *
無論如何不要使用是一個好習慣,以減少將此類查詢懶惰地複製到用於生產的程式碼中的誘惑。為免生疑問:雖然通過 SSMS 或類似工具進行快速檢查/診斷是完全可以接受的,但由於其他地方有詳細記錄的原因,您應該
SELECT *
盡可能避免在生產程式碼中使用。這表明“在 SSMS 中沒問題”的一個重要例外
SELECT *
:如果您正在試驗 TSQL,它最終會在其他地方的程式碼中永久化,那麼SELECT *
無論如何您都需要使用非版本進行測試,因為您可能會遇到一個邊緣情況,從而製定出意料之外的計劃/performance 兩者之間的差異,因此您最好先不做,SELECT *
而不是以後為自己做更多的工作。我嘗試比較查詢計劃,但沒有發現兩者之間的差異。
如果您選擇了所有列,那麼
SELECT *
無論如何都會擴展到相同的查詢中,因此計劃將始終相同。