這一點我想大家已經是比較熟知了,這樣的錯誤相信會犯的人不會太多。但我這裡還是要說一下。
不使用Select *的原因主要不是坊間所流傳的將*解析成具體的列需要產生消耗,這點消耗在我看來完全可以忽略不計。更主要的原因來自以下兩點:
擴展方面的問題
造成額外的書簽查找或是由查找變為掃描
擴展方面的問題是當表中添加一個列時,Select *會把這一列也囊括進去,從而造成上面的第二種問題。
而額外的IO這點顯而易見,當查找不需要的列時自然會產生不必要的IO,下面我們通過一個非常簡單的例子來比較這兩種差別,如圖1所示。
圖1.*帶來的不必要的IO
這一點有時候會被人疏忽,因為對於T-SQL來說,如果對於變量不指定長度,則默認的長度會是1.考慮下面這個例子,如圖2所示。
圖2.不指定變量長度有可能導致丟失數據