日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

查询反模式 - 隐式的列

發布時間:2025/3/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查询反模式 - 隐式的列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、減少輸入

  程序員都喜歡使用通配符,如:

SELECT * FROM Person

  又或者省略字段名:

  INSERT INTO Person VALUES('10','張飛'...)

二、捷徑會讓你迷失方向

  對于以上代碼,如果你僅僅是在開發過程中用于查看一下數據庫信息,又或者你只是寫個小程序自己玩玩,這是沒有什么問題的。

  但是如果一旦你習慣于這樣編寫正式生產環境中的代碼,那問題就隨之而來了。

  1、破壞代碼重構

  如果數據庫更改了,比如增加了一列:

  ALTER TABLE Person Add Age int

  這下糟糕了,你程序中所有的

  INSERT INTO Person VALUES(...)

  語句都會報錯。

  早使用這種隱式模式執行INSERT時,輸入必須嚴格按照定義表時的那些列的順序,如果列變了,這條語句就會拋出一個錯誤,甚至有可能就會拋出一個錯誤,甚至有可能把數據寫到錯誤的列里面去。

  假設原本是使用隱式模式查詢:

  SELECT * FROM Person

  但是加入刪掉了中間的一個列:

ALTER TABLE Person DROP COLUMN Age

  那么加入是使用DataTable的方式裝載數據庫內容,那么row[10]可能就已經不是第十個。在重命名、添加、刪除列的時候,程序代碼并不能適應查詢結果的改變。如果使用了通配符,就無法預測這個查詢會返回多少行。

  2、隱藏的開銷

  在查詢中使用通配符可能會影響性能和擴展性。一次性查詢所獲取的列越多,客戶端程序和數據庫之間的網絡傳輸的字節也越多。

  生產環境中的程序可能會有很多并發的查詢請求。它們都共享同一個網絡帶寬。太多客戶端同時查詢返回上千條記錄可能會造成阻塞。

  3、合理使用反模式

  在你只是為了快速地寫幾個腳本對一個解決方案進行測試,或者寫臨時SQL查詢對當前數據進行查看時,使用通配符是合情合理的。只執行一兩次的查詢對可維護性沒有任何要求。

  當然,輸入一張很多列的表的所有列名是很耗時的,對某些人來說,開發效率可能比程序運行效率更加重要。例如,當你開發的是較少用戶量的小公司內部訪問程序,這時候返回數據所使用的帶寬比查詢語句本身要多得多。這時候沒必要糾結這些問題。

三、解決方案-明確列出列名

  1、預防錯誤

  每次查詢都列出所有你需要用到的列,而不是使用通配符或者隱式列的列表。

  SELECT Id,Name... FROM Person
INSERT INTO Person (Id,Name,Age...) VALUES(1,'張飛',22...)

  這樣做的好處如下:

  •   如果這張表的某一列的位置被移動過,他不會對返回結果中這一列的位置造成影響。
  •   如果這張表中新加入一列,它是不會出現在查詢結果中的。
  •   如果從這張表中刪除一列,你的查詢會得到一個錯誤,但是直接就能夠找到問題所在,這是符合盡早出錯原則的。

  2、減少資源占用

  如果必須關心軟件的可擴展性和程序的吞吐量,你應該檢查一下網絡傳輸過程中可能造成的浪費。一旦在SQL中禁用通配符,那么就很自然地去除那些不需要的列,提高了帶寬和內存的使用效率。

轉載于:https://www.cnblogs.com/zxtceq/p/7160383.html

總結

以上是生活随笔為你收集整理的查询反模式 - 隐式的列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。