最近萬年議題又被拿出來討論了,「該把程式碼寫在 Stored Procedure,還是寫在 Application 裡面?」
⠀
以下是個人的看法以及選擇,僅供參考。
⠀
我個人的背景是這樣的,都是以開發 Web 應用程式為主,資料庫的使用經驗都在 SQL Server,其他的資料庫領域我不了解,在這樣的背景之下我個人傾向不使用 Stored Procedure 的,原因如下:
⠀
1. 對 DB 的操作已經是在應用程式生命週期的末端,這時候關注的應該是「效能」,如何運用最少的資源(CPU、Memory、Network IO、Disk IO、Money...)最快的速度拿到想要取得的資料,如果把程式碼都寫在 Stored Procedure,為了效能這件事,就會開始在商業邏輯中混入一些 Temp Table、額外定義 Table Type、因效能而使用的特殊語法...等,隨著時間流逝這個 Stored Procedure 就慢慢變成了哥吉拉。
⠀
2. 由於 SQL Server 的改進,Stored Procedure precompiled 的優點早已消失。
(https://www.codeproject.com/Articles/414272/Stored-Procedures-DO-NOT-increase-performance)
⠀
3. 被 Parameter Sniffing 搞得很煩。
⠀
4. 身為那條龍,我為何要將原始碼放在兩個地方?
⠀
雖然我不想使用 Stored Procedure 但不表示可以忽視查詢效能這件事,基本對 Index 的了解、各種 JOIN 差異、查詢計劃的解讀、...等,會影響查詢效能的要略懂,也順便跟還在跟哥吉拉奮戰的朋友說聲辛苦了。
「sql index效能」的推薦目錄:
sql index效能 在 91 敏捷開發之路 Facebook 的最佳貼文
Entity Framework Performance and What You Can Do About It
傳送門:https://www.simple-talk.com/…/entity-framework-performance…/
很多時候 ORM 慢,不是本身慢,而是使用 ORM 的人犯了幾個不該犯的錯誤,下列列出該注意的事項:
① model還沒給條件,就觸發執行 SQL 的問題
② "N+1" Select 的問題(沒有一次把要用到的關聯資料撈出來)
③ Select * 欄位全撈的問題
④ DataType 不相符的問題
⑤ Miss Index 的問題
⑥ 如何讓查詢計畫 reuse 的問題,例如分頁查詢影響查詢參數的方式
⑦ 批次作業使用 BulkInsert 相關的 API 可以提升 10 倍以上的效能
⑧ 用 AddRange() 取代迴圈裡面的 Add(),搭配AutoDetectChangesEnabled 開關。
※ 範例的效能提升:reduced from 34 seconds down to 85 ms – a 400x speed boost!
⑨ 如果只是要讀資料,沒有要異動,透過 AsNoTracking 關掉 Change tracking。
其他的注意事項,請自行參考文章後半部細節。
#EntityFramework #程式不是會動就好
sql index效能 在 紀老師程式教學網 Facebook 的最佳貼文
[免費書籍] 討論 SQL 效能不可多得的好書,重點是免費
討論 SQL 語法的書很多,但討論 SQL 底層機制、以及如何正確使用 SQL 語言,以取得高效能,恐怕就不多了!重點是這本還免費!真的是佛心來的。
每天監看 800~1000 則程式設計相關文章,雖然枯燥無聊,但挖到寶我就會非常高興,手癢得不分享不行。而且好東西會有個「習性」,就是「呼朋引伴」。要嘛~就一兩個禮拜沒有一則好物,要嘛~就一天來個三四則。今天發文真的是發上癮了,就請大家欣賞「Everything developers need to know about SQL performance」這本不可多得的好書吧:
http://use-the-index-luke.com/sql/table-of-contents
sql index效能 在 SQL PASS Taiwan | 經驗分享:建立INDEX後 - Facebook 的必吃
難忘的經驗:建立INDEX後,讓SELECT效能變慢. 1.情況說明: 朋友急call,告知我他的系統變得超慢,看了一下IO高的SQL,有大量的IO發生,查看一下執行計畫發現大量 ... ... <看更多>
sql index效能 在 從開發者的角度看SQL 效能- YouTube 的必吃
當你正在開發資料庫應用的時候遭遇到了 效能 問題,這時到底是DBA 該出面?還是開發人員自己解決?從使用者的角度,他們有在想些什麼? ... <看更多>
sql index效能 在 [心得] 2023年初找工作心得- 看板Soft_Job - 批踢踢實業坊 的必吃
大家好,小弟長期受軟工版照顧,因此想提供自己年初找工作的經驗回饋各位。
我的背景是私立學店學士本科畢業,沒有發表任何 Paper 或是認識某某大佬,可能的優
勢就是在美國當過交換學生,英文能力自認中上。
我有 4 年多後端開發經驗,主要使用語言包含:PHP、JavaScript、NodeJS;也有少許前
端經驗,使用過 ReactJS、VueJS 框架協助前端開發(但都不是專職,複製貼上居多)。
其他使用過的技術或資料庫包含:MySQL、MongoDB、Redis、GraphQL、Docker、Elastics
earch;雲端服務則是有串接過 AWS 和 GCP 一些服務。
此外,我也利用業餘時間練習使用 NodeJS、TypeScript 寫一些練習用的 Side Projects
,去年嘗試自製一個前端的 Library 並成功發佈到 NPM 上。
Leetcode 的 Easy 和 Medium 各寫了 100 多題,平常都是解個 Daily 練手感,準備面
試期間才練得比較勤。
這次找工作目標:
1. 想轉換產業,不想繼續寫 PHP。
2. 想持續往 Backend 發展。
3. 想找外商訓練英文。
這次的數據大概是這樣:投 30 家公司,面試 17 家,1 個 Offer,本篇介紹有寫作業或
是正式進入面試環節的公司提供大家參考。
以下若無特別標記職缺均為「Senior Backend Engineer」,目標薪資 900k — 1M NTD /
年。
1. Skywatch
透過 HH 投履歷,該公司主要做智慧門鎖、鏡頭的公司,競爭對手包含Amazon Ring。
收到履歷之後對方要求寫轉換 JSON 為 MessagePack 資料格式的小程式。不過我對那種
資料結構並不熟悉,參考文件以及很多開源資料之後才完成,一些 Optional 的要求,如
:Unit test、MessagePack 轉回 JSON 跟測試介面都有完成;但對方覺得「鼓勵查閱資
料,但希望能理解內容而非只會開發」而收到感謝函。
當下收到這種回饋我是覺得蠻無奈的,仔細想想很慶幸學到一個新資料結構。
2. Oursky
Yourator 自投。港商,早期似乎是外包軟體公司,現在有自己開發一些軟體。
收到一張 PDF 裡面有三個程式題,不難,寫完之後有自己寫一些 test case 感覺是沒什
麼問題。但不知道對方的標準,一週後收到 email 通知沒通過。過程中複習了一些資料
結構與演算法,覺得蠻充實的。
3. DeepHow
Yourator 自投。美商,利用 AI 以及後台的影片編輯功能,提供工廠自製教育訓練影片
,提升新進員工訓練效率。
主要與兩位工程師聊過往經歷,考了簡單的 JavaScript 題目:合併 Object 以及 Rever
se String;接續考了四題 SQL 題目,如果平常有在寫 Raw SQL 應該駕輕就熟,但我用
ORM 用慣了導致有些基本觀念都忘記,印象最深刻的是考了 Rank。
之後就是問答,我主要詢問專案開發流程、跨國團隊合作流程以及公司接下來的目標。兩
位面試的工程師都回答的非常完整,過程中也給予我許多回饋,還不錯的一次面試。一週
後收到感謝函。
4. 火星計劃
Yourator 自投。乍看名稱根本不知道在做什麼的公司,仔細看官網才知道是賣筋膜槍起
家的。
與一位工程師面試,先按照履歷詢問過往經歷,詢問了一些資料庫實際運用中會碰到的問
題,如:Transaction Lock。
之後考了兩個經典的 JavaScript 非同步問題,混搭 Promise、setTimeout 回答 consol
e log 的順序;之後要求實作一個簡單的數學 function,但我想太多導致回答問題的過
程不太順利,其實就只是一個取 Log 的程式而已。
最後詢問公司接下來主要的業務是什麼以及未來走向。可以感覺到對方是數理能力蠻強的
人,算是有耐心、好聊的面試官。最後無聲卡。
5. 萬達寵物
Cakeresume自投。原毛孩市集,被萬達併購。
On-site 面試,辦公室在中山捷運站附近。與一位資深工程師以及技術長一起面試,主要
按照履歷問答,比較多開發、協作的流程,有被問到是否處理過 Race condition 或是實
作中會怎麼避免?回答之前我用過 Shared Lock、樂觀鎖這種作法。
最後得知他們希望有親手調校 DB 效能經驗的後端工程師,但這部分以往都是 DevOps 或
是 Infra 協助處理,我頂多透過 Dashboard 監控,或是下指令Kill Process 之類的,
實務上沒有親手設定 DB 的經驗。一週後感謝函。
6. HighStreet
Yourator 自投。職位是全端工程師,主要提供區塊鏈遊戲的服務,可以透過農虛擬貨幣
的機制在遊戲內蒐集 HIGH 幣,並且直接在他們 Shopify 上的商店消費,使用 HIGH 幣
折扣買賣商品。
面試過程是與一位 Founder 和一位資深工程師面試,主要都是聊天以及過往技術分享,
是一個輕鬆沒壓力的面談,但我對區塊鏈的商業模式並不非常理解,對方是希望求職者對
區塊鏈有基本知識以及信心。聊完後彼此都認為現階段彼此不適合。兩週後收到感謝函。
7. 恆遠科技
HR 從 104 主動寄送面試邀請,成人直播產業,老闆是中國人。
一開始先拿兩個簡單的題目:設計一個像 IG 追蹤、取消追蹤、取得粉絲列表的資料庫 T
able 以及撰寫主要 API,可以用 Pseudocode 描述如何處理大流量高併發的情況;第二
題是用遞迴的方式取得某一個資料夾的大小、所有檔案大小(用副檔名分類),要注意 E
rror Handling,如果 Permission denied、Invalid path之類的。
一週後獲得面試機會,與中國 CTO 問答,過程中全都是問資料庫操作跟觀念:什麼是鎖
、Index 最左匹配原則、SQL 優化流程、什麼是 Deadlock 並且如何處理、字串欄位預設
空字串或 Null 的差別在哪 … 等等;事後想想應該都是基本觀念,只是在面試的環境下
太緊張,沒能把自己的觀念跟表達方式整理起來然後應答,所以
回答得不是很好。
之後與 HR 聊一些公司福利、面試流程。這次算是第一次被洗臉的面試,因為如果部分不
了解人家馬上就看得出來。一週後感謝函。
8. Buyandship
Yourator 自投。港商,做海外代運服務。
先收到一份問答題,比方說:平常習慣那些開發工具?幫 Junior 工程師 Code Review
時自己首先注意的三件事是什麼?如實回答就好;第二題是個簡單的 System Design,把
原程式改用 Queue Job 加監控流程。
一週後獲得面試機會,與台灣人 HR 和香港 CTO 面試;主要是根據履歷問答,隨後問了
簡單的技術問題:什麼是 GraphQL?Left Join 跟 Right Join 差別 ... 等等。
印象最深刻的是 CTO 有詢問對於團隊有沒有偏好,我當時說「沒有偏好,但想持續開發
」,但其實這不是一個很好的回答,後來我反省應該好好包裝自己的答案,如:「我想持
續專注在配合 Business Logics 的程式開發,因我過去有電商經驗,也可以加入電商團
隊提供協助,但我優先配合貴公司內部 Team matching 的結果。」
再一週後收到感謝函,後來反省,應該除了沒有包裝好自己的答案,技能樹本來就有差一
點了,當然對公司來說可以找到更適合的人選。但這次也是一個輕鬆無壓力的面試過程,
感謝他們給我機會。
9. kkday
kkday HR 主動聯繫。職缺是全球電商後台系統,是寫 PHP。
雖然職缺內寫後端,但一進去 Google Meet 發現有前後端各一、共兩位工程師。那時對
方才告知我雖然職稱是後端,但內部同仁都處理全端業務,比重大概 3:7(前:後);首
先前端工程師先問一些問題,印象比較深刻的是問 NodeJS 跟純 JavaScript 的 Event L
oop 差在哪。前端問題能答就盡量答了,而後端也是著重在大流量的系統架構設計。
過程中兩位面試官都是依據我的履歷問問題,然後都一步一步從基本的設計方式然後引導
到進階處理,讓我受益良多。
最後跟 HR 聊面試流程、福利這些基本資訊。一週後感謝函。
10. 慧景科技
HH 推薦,主要透過 AIoT 提供太陽能相關的服務。
一開始用 Colab 寫一份 Python 考卷,都是基本題:Decorator、Comprehensive … etc
,兩天後約二面。
二面是最後一關面試,分上下半場,面對一位資深工程師。上半場是用 Colab 考題目:
我拿到一題 Medium — Longest Substring Without Repeating Characters,第二題是
Clean Code 概念去 Refactor 原有的程式碼。
理論上下半場是 System Design 以及談薪資福利,但我沒到那個階段。上半場休息五分
鐘後得到 Feedback:觀念都正確,但是實作起來速度太慢,因為他們需要資深工程師重
新設計架構以及重構程式碼,未來也有帶領 Junior 的需求,
但我的經歷和實作能力還達不到那個境界,所以二面上半場結束後收到感謝函。
最後面試官與我聊了一下他們期待的工程師能力以及幫我解答許多問題,也給了我一些關
鍵字去尋找答案。
結束前有詢問是否對其他職缺有興趣,可以再安排面試。事後我把這個機會推薦給我朋友
,因為我朋友比我更適合。
很感謝面試官十分親切且有耐心的問答,整體讓
我覺得備受尊重、收穫良多!
11. 台達電
視訊事業部門。我在 104 投了其他部門都沒回應,反而這個沒投的 HR 主動邀請。
線上與五位面試官面試,一位後端、三位前端和一位 UI/UX 設計師。
主要發問都是後端工程師,也是先依據經歷問答,著重在怎麼處理過往技術問題以及怎麼
應用一些技術,還有我的 Side Project Demo。
最後對方介紹他們的業務範疇以及專案內容,使用工具很多樣,後端語言就有 NodeJS、G
o 以及 Java;前端主要都是 ReactJS。
結束前,前端工程師詢問我在 NPM 上那個套件的問題。
台達電是少數對我的 Side Project 有興趣並且詢問內容,過程中也是很輕鬆的聊天。三
週後感謝函。
12. ChiChat 日商邦德
HH 推薦,ChiChat 是智慧推薦機器人,臺灣主要應用在 LINE 上,透過問答推薦商品或
方案。
On-site 面試,公司在小巨蛋附近。他們主要使用 Python,負責維運日本工程師的專案
。
當天與一位後端工程師、HR、技術主管面試,整體過程是與後端工程師聊開發經驗和技術
分享。
聊完後現場做個白板題,簡單的字串處理,過程也做到和出題者確認 I/O 限制,我平常
有用 Python 寫 Leetcode,因此邏輯面我可以直接使用 Python 常用的 function 解釋
,最後是順利解題且得到正向回饋。
接著對方有說明,該職位需要接手管理職,我表示可以當 Junior 或 Intern 的 Mentor
,但目前並沒有經驗跟計劃往管理職發展。
最後再和 HR 做一些 BQ 問答、公司介紹。兩週後對方說找到更適合的人選,收到感謝函
。
13. LSCM
HH 推薦,香港政府的研究組織,主要接收政府或其他外包工程,台灣團隊的業務是智慧
城市軟體開發。
面試前先寫兩題 HackerRank 的 Easy 題目,第一題是收斂一個正整數 Array,但沒印象
看過類似的題目;第二題是 Best Time to Buy and Sell Stock。
通過後兩天內約面試,面試主要用中文,只有半小時,快速自我介紹跟問答之後結束。大
概一週後得到回覆:Offer get。
14. Yourator
朋友內推(老實說我從沒想過可以去應徵求職公司XD)。
一面先跟 HR 簡單電話聊,然後約隔週與主管視訊面試,主要也是自我介紹跟聽老闆講產
品發展,事後老闆也問網站是否有什麼需要改進的地方?我說大部份流程走起來都很順,
同時也許願了一個新功能。
隔週與兩位資深工程師 On-site 聊過往技術,有針對 Elasticsearch 的一些實作聊了一
下,如:Filter vs Bool、Dynamic Mapping。過程聊了一個半小時,可以感覺到兩位都
是很厲害的工程師,雖然他們都說比較喜歡前端,但對於後端的系統架構跟前後端溝通都
有一套見解,讓我受益良多。
最後 HR 詢問一些 BQ 問題然後再解釋一次福利。整個面試過程快速而且讓面試者感覺很
受尊重,是個很棒的一次面試體驗;但最後對方找到更適合的人選,三週後收到感謝函。
15. SambaTV
LinkedIn 自投,美商,需要與美國的工程師全英文線上面試。那次我正好在旅遊,甚至
把電腦帶到青旅然後凌晨在大廳面試。
為了配合時差我大概在凌晨 2:00 面試,過程中先聽對方自我介紹以及說明這個團隊的目
的,是想透過區塊鏈技術處理 Samba 的用戶資料,確保合理使用以及給予回饋,但整體
專案走向似乎也不是很明確。
後來換我自我介紹,但那天我太累了,導致有一點點口齒不清,講話速度有點放慢。結束
後對方主動給我 Email 並說有問題可以隨時問他。我後來有發一個問題,只是對方沒回
應,最後無聲卡結案。
16. 幣護 Aegis Custody
Cakeresume 自投,兩天後 HR 邀約 On-site 面試。這次大概聊 2 小時。
台灣辦公室地點在象山公園外的環球世貿中心,主要是開發和維運團隊,與兩位工程師一
位產品長面試,自我介紹之後按照履歷問答。
因他們的 Tech Stack 包含 NodeJS 以及 GraphQL,面試時主要就往這方面問,包含經典
的 N + 1 問題、串接第三方服務時規劃架構的流程、是否有高併發經驗、雲端服務經驗
、資料庫正規化是什麼 ... 等等,我有些問題我有表明不太背誦教科書式的答案,因此
主要是說明使用情景,再去解釋實作中做的決定與選擇。
最後產品長介紹公司產品、規模以及問答,然後一些 BQ 問題。我和三位面試官的聊天過
程很舒服,讓我感到很受尊重。最後已有 Offer 且婉拒二面。
17. HTC VIVERSE
Cakeresume 自投,兩天收到 HR 預約面試,共兩關且都是線上面試。
第一關與一位後端工程師面談,先自我介紹後根據履歷問答,過程是一家公司經歷講完就
先問答一次。之後幾個簡單的技術問題,如:MySQL vs MongoDB、資料庫正規化、商業活
動的集點 API 設計。完成後便是對方介紹自家團隊,團隊負責整個 VIVE 生態系的軟體
專案,如:VIVEPORT、金流、企業佈署 ... 等等,包山包海。已有 Offer 且婉拒二面。
心得:
找工作很累,但過程中也是不斷在充實自我。謝謝一路上幫助我的人,在這預祝各位工作
順利!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.235.85 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1680961968.A.00F.html
※ 編輯: hobnob (223.137.235.85 臺灣), 04/08/2023 21:54:13
※ 編輯: hobnob (223.137.235.85 臺灣), 04/08/2023 21:54:51
作職涯發展的過程啦,找工作也是看緣分
有這個程度,我也是受他們鼓舞才拼命想去學,先天已經差人一截了,想翻身沒道理不努
力
... <看更多>