1、
SELECT
* 語句取出表中的所有字段,不論該字段的數據對調用的應用程序是否有用,這會對服務器資源造成浪費,甚至會對服務器的性能產生一定的影響。
2、如果表的結構在以后發生了改變,那么
SELECT
* 語句可能會取到不正確的數據甚至是出錯。
3、執行
SELECT
* 語句時,SQL Server首先要查找出表中有哪些列,然后才能開始執行
SELECT
* 語句,這在某些情況會產生性能問題。
4、使用
SELECT
* 語句將不會使用到覆蓋索引,不利於查詢的性能優化。
5、在文檔角度來看,
SELECT
* 語句沒有列明將要取出哪些字段進行操作,所以也是不推薦的。
關於
Select
* 與
Select
字段名 的問題!
理由一:不用 * 號而列取字段,是嚴謹且良好的習慣。
理由二:記得在SQL2000,如果在視圖中使用了
select
*,像 SQL code
select
*
from
tableA
然后再修改tableA的結構,
回過頭來看之前建立的視圖,竟發現視圖是不會自動更新的,
即在視圖中的
select
*,返回的還是原有的舊結構,
這種不能同步更新的情況,很容易被忽視,造成錯誤.
理由三:
我以前也這樣做的,不過都讓改成顯示列名了.理由是如果數據庫中的這個表有所改動,如增加一列,而根本不需要顯示.所以還是盡量用列名比較好.而且對於代碼的理解也比較好.
理由四:
不建議用*,最好是寫列名,排版好就行了。
理由五:
建議下一個SQL標准中取消
"select *"
的用法 :)
在大多數情況下都是明確寫出列名好,
select
* 大多數情況下是圖個方便。
理由六:
select
*只是圖個方便,當你的返回表中有入讀比較大的字段或者有二進制數據字段時,容易產生字段名混亂錯誤。你調用返回表時可能會出現的得不了具體值。一個個寫出來字段可以避免這些情況。
理由七:
這要看實際情況啥...
考慮到大數據量時最好用字段不用*;因為用*會把其表中的如INDEX...等用不上的信息全部提取.
習慣不用*久了秒一切OK了.
數據量大的效率問題就出來了...