select * 對性能的影響;
若是select 須要的字段都是被索引的,並且where子句也可從索引得到。那麼查詢就只需掃描索引便可。所以select *須要關聯未被索引的字段,效率就差了。
使用*, 在解析的過程當中會將* 依次轉換成全部的列名, 這個工做是經過查詢數據字典完成的, 這意味着將耗費更多的時間。
若是須要取全部的列,那麼SELECT *和SELECT COL1, COL2 *……之間沒有性能差異。
可是若是有不須要的列,那麼SELECT *就會將更多的數據從服務器傳遞到客戶端,不要小看這些多餘的數據傳遞,它們佔用了大量了網絡帶寬。
若是說IO速度是瓶頸,那麼Oracle還提供了緩存,來檢查物理IO的數量,而網絡傳播的可沒有辦法來減小數據的傳送量。
一樣是全表掃描的執行計劃,百萬級的數據量,一個SELECT COUNT(*) FROM TABLE可能在秒級完成,而若是是SELECT * FROM TABLE呢,本身試試在SQLPLUS上執行,看看你須要等待多長時間。固然,這還包括輸出時間,那麼你可使用SET AUTOT TRACE,而後看看等待時間。
更況且,SELECT *的狀況,一旦表增長了新的字段,那麼使用了SELECT *的程序、PL/SQL代碼等都要從新修改緩存