溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

不用select的原因有哪些

發布時間:2021-10-15 16:20:03 來源:億速云 閱讀:189 作者:iii 欄目:web開發

這篇文章主要講解了“不用select的原因有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“不用select的原因有哪些”吧!

第一宗罪:不必要的 IO

這會導致 DBMS 讀取所有的數據 pages,但是這些數據你又不用,在后來的 SQL  中又可能被過濾掉了或者是直接沒用,但是讀取數據是需要成本的,尤其大字段,例如 blob,text。

select colunm_a,column_b(select * from XXX) tmp

第二宗罪:增加了網絡負擔

讀取更多的數據意味著返回更多的數據給客戶端,這就是意味著要占用更多的網絡帶寬。

第三宗罪:占用了更多內存

因為讀取了多余的數據,你的程序需要更多的內存去存儲這些數據,這意味著你將會使用珍貴的內存資源去存儲這些不必要的數據。

第四宗罪:對 ResultSet 上列順序的依賴

如果你用了 select * 在你的程序中,并且依賴 ResultSet(返回結果)的列順序。

那么如果修改了表結構(添加或者刪除字段)可能會影響返回結果的列順序,從而可能導致你的程序數據錯誤或者程序異常。

第五宗罪:視圖綁定

在數據庫設計過程中,我們經常會有這樣的情況下:

  • 某個基礎表會被多個視圖或者存儲過程引用。

  • 修改基礎表的時候,我們必須小心翼翼地,因為不會有任何提示告訴我們,如果繼續修改,會不會造成視圖或者存儲過程有問題。

  • 即便我們知道有問題,我們也沒有辦法去讓視圖和存儲過程刷新得到表最新的信息。

如果你在創建視圖中使用了 select *,就會導致各種各樣的 Bug。

第六宗罪:關聯沖突(Conflict in JOIN)

在簡單的 SQL 中可能會表現正常,但是在你多表關聯的時候可能會因為重名字段導致 SQL 錯誤。

例如 created,status,updated 等常見字段(一般表都會有)。

第七宗罪:拷貝數據

當你使用 SELECT * into INSERT .. SELECT  做數據拷貝的時候(一種常見的數據拷貝方式),當兩張表的字段不一致時,你就可能將錯誤的數據放入了錯誤的列。

第八宗罪:拒絕了使用覆蓋索引的可能性

覆蓋索引是 MySQL 中非常重要的是一個優化手段,基本原理就是查詢都字段都在索引中避免回表,所以 * 會導致覆蓋索引失效。

總結

不使用 select

主要是是圍繞著資源、和程序的穩定性和安全來說。

①浪費了時間

不論是讀取數據還是傳輸數據,浪費都意味著等待,時間是無價的。

②浪費了資源

資源這么寶貴,你怎么能這樣呢?

③增加了系統出 Bug 的可能性

例如:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 程序正確運行數據不對

  3. 程序報錯

  4. 程序運行結果不確定

為什么有人會使用 select * 呢

①珍惜時間

可以搞定的事情,為啥還要寫那個多字段呢,也不美觀和直接啊,其實就是懶!

②減少 SQL 解析器的工作

認為在 select 語句中協商眾多的字段,會增減 SQL 解析的工作,例如是有權限、字段是否存在等等。

這個想法是對的,但是這是很早以前的情況,現在 * 反而會增加 SQL 解析器的工作。

感謝各位的閱讀,以上就是“不用select的原因有哪些”的內容了,經過本文的學習后,相信大家對不用select的原因有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女