自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

5000 行的 SQL 源代碼,怎么讀?

運維 數據庫運維
今天的小 C 很不在狀態(tài)。昔日的她,一大早肯定不會愁容滿面,似乎像是星巴巴沒有喝夠的樣子,興奮不起來!11:30 了,很少聽到她 HHKB 落鍵的清脆聲,一定是遇到難題了!

[[429448]]

本文轉載自微信公眾號「有關SQL」,作者有關SQL。轉載本文請聯系有關SQL公眾號。

今天的小 C 很不在狀態(tài)。昔日的她,一大早肯定不會愁容滿面,似乎像是星巴巴沒有喝夠的樣子,興奮不起來!11:30 了,很少聽到她 HHKB 落鍵的清脆聲,一定是遇到難題了!

“怎么,今天的熱焦瑪少了點勁兒嘛,感覺?”我走近了小 C。

“L, 面對著滿屏的 SQL,誰都會提不起精神啊。何況這近 5000 行的代碼,怎么看得過來嘛!看了中間忘了開頭,看到結尾,前面的全忘光了,好煩呀” 小姑娘抱怨起來也是毫不拖泥帶水。

“喲,恭喜你,遇到這么極品的 sp 啊。在我的印象里面,經歷了兩次重構之后,上千行的代碼,就那么幾個,今天被你遇到了。我看看是哪個”

“原本我以為很簡單的一個 AddUpdate, 誰想邏輯這么復雜,牽扯的表也太多了,其中幾個表還有上百個字段,這都沒法看了” 小 C 的鼠標滿屏的亂走,看得我 300 度的眼睛,有些吃力。

“你這一行一個字段,是你自己設置的吧,其實不需要那么格式化,反而更簡單。你看啊,一個 Insert 被幾十個字段隔成了兩屏,容易造成思維停頓。兩行搞定的事情,做復雜了。還顯得代碼量大,失去耐心。”

“那我還原成原先的格式,也有近 3000 多行,還是多啊”

“這閱讀源代碼啊,是有技巧的。我可以分享三點給你。分別是,通讀,聯想,批評。”

“第一點,通讀,非技術性的通讀。首先告訴自己,一遍讀完就能通曉5000行代碼細節(jié),是不可能的事情。讀代碼前,耐心先行。接著就是開始第一遍的閱讀。此時的代碼走讀,我們不停留在具體的技術末節(jié)上,比如 unpivot 的語法是怎么樣實現的,為什么有里三層外三層的嵌套,為什么這里用了動態(tài) SQL 去拼接。再比如,XML 的節(jié)點鋪設,為什么要這么定義,共有多少層。這些留在最后。”

“我們在走讀代碼的時候,尤其是第一遍,首先要理清的是業(yè)務的數據流,比如訂單是如何觸發(fā)的,分別涉及到哪些主體,人,物,財,時間。知道這些數據流分別存在哪些表里,存儲的先后順序是什么,會記錄哪些日志。我們的 sp 邏輯結構相對簡單,一個事務一個存儲過程。所以第一遍,通讀,越快了解所有涉及到的業(yè)務過程,最重要。你也可以在手邊,畫畫流程圖,幫助記憶。”

看著小 C 若有所思的眼神,分明能感覺到她腦子里抽象的擰巴,因此順手我畫了一張上面的流程圖。“第一遍走讀代碼,你能清晰的畫出類似上面的圖,知道這些數據存在哪里,就足夠了。”

“嗯,原來是這樣,難怪我老是連接不起來,看過了,腦子里留不下印象!那第二點呢?”

“第二點,需要聯想,也就是想象力??赐甑谝槐椋灰敝吹诙?,就在腦子里,回想第一遍的過程。把你認為創(chuàng)建一個訂單需要記錄的信息給標出來,盡可能詳細的在流程圖上標準細節(jié),就好比人,在什么時候需要記錄人的信息,需要檢驗人的信息;再比如貨,什么時間段,要檢查貨的庫存,要記錄貨的哪些屬性,單價還是 SKU,怎么更新貨的庫存,更新失敗了怎么辦?”

“如果你看到長篇的 SQL ,還只停留在腦子里,不靠譜。工作記憶永遠只有 15 分鐘。讀完一遍后,你被叫去開個會,回來你就可能記不清了。所以及時的傾倒出來你剛才讀到的 SQL,多問問自己數據是怎么流轉下來的,畫好流程圖,標準自己的想法,越清晰,問題越多,越有利下一遍的閱讀...”

"我知道了,我知道了,就是帶著問題,主動去尋找答案!"

“理解到位,就是這樣。給自己找問題,千萬別一遍看完代碼,什么都沒留下來。接著,你可以去閱讀第二遍,第三遍,甚至是第四遍了”

"那還有第三點呢?" 小 C 似乎來勁了。

“第三點最重要,批評。如果你對讀到的代碼,沒有任何要抱怨,沒有任何疑惑,那說明還沒理解到位。當你看到這些代碼,你認為嗯,這段寫的很好,這段寫的在理,都是這些溢美之詞,那完了,你沒深入。你可能對 unpivot , cross apply, openXML, OffSet 讀到真正實戰(zhàn)版代碼而感到興奮,覺得這段 sp 就寫的很好,那對 SQL 的認識就太膚淺了。”

“新聞界,會有很多評論家,對重大新聞做二次剖析,比如曹林,《時評寫作十講》的作者,擅長對每篇新聞做雙面解析。既講述原新聞作者的報道手法,也評價原作者的目的與動機,最后還補充自己的觀點,非常有意思。”

“在我們編程這個圈子,也有很多書,專講這方面的。我給你推薦幾本吧,《編程珠璣》,《CLR Via C#》, 尤其是 SQL 數據庫方面,《數據庫索引設計與優(yōu)化》,《Oracle 優(yōu)化日記》,《T-SQL Querying》,《T-SQL 性能調優(yōu)秘籍-基于SQL Server 2012 窗口函數》”

“這些書,非?;A,我自己看過不止一遍??梢钥焖賻湍闾岣邇裙ΑG?,書的優(yōu)點在于,作者就像是代碼評論家一樣,告訴你為什么 SQL或者代碼這么寫,不如那樣寫來的高效,其中的原理是什么。這些都是你在分析具體代碼時,可以學到的真正有用的東西。我們應該在任何一段 SQL 中都找到可以學習的地方,最好是找到這段代碼的設計弱點,比如子查詢嵌套太多,不簡潔;比如篩選條件不夠優(yōu)化,需要代碼重構,這就是第三點,批評的實質。”

“又推薦書啊,上次推薦的還沒看完。” 

“書在用時,方恨少。”

 

責任編輯:武曉燕 來源: 有關SQL
相關推薦

2021-10-13 08:16:14

SQL 代碼系統

2013-10-09 13:25:40

Google

2013-10-10 12:28:56

Google開源代碼

2021-03-08 15:04:48

編程Python代碼

2022-10-19 11:17:35

2009-12-15 19:18:39

Ruby源代碼

2010-09-01 15:36:00

SQL刪除行

2022-09-15 07:55:22

WPFMAUI內存

2009-04-03 08:28:39

2011-09-16 16:05:10

MySQL

2009-08-20 16:34:50

Linux源代碼紅帽Linux內核

2012-08-01 09:23:31

代碼

2016-10-11 16:28:11

源代碼

2010-08-03 10:16:52

Flex源代碼

2010-04-29 12:57:33

Unix源代碼

2009-06-12 19:03:41

Hadoop源代碼Yahoo

2020-11-13 13:05:27

Java開發(fā)代碼

2010-03-29 16:48:18

Nginx內核優(yōu)化

2013-07-17 09:42:34

云計算數據庫NoSQL

2021-05-28 07:39:17

SQL代碼操作
點贊
收藏

51CTO技術棧公眾號