我們或多或少應該都有遇過一種情況,就是某一些資料表 JOIN 起來的查詢較為緩慢,面對這類執行時間較長的查詢,我們第一步是先進行資料表本身的效能調校,調校之後如果查詢還是需要一點時間,又剛好我們的資料庫系統是使用 SQL Server 的話,那我們可以考慮為查詢建立 Indexed View
試試看。
[食譜好菜] 在 SQL Server 中利用 Indexed View(索引檢視表)來加快複雜查詢的速度
- 2939
- 0
- SQL Server
我們或多或少應該都有遇過一種情況,就是某一些資料表 JOIN 起來的查詢較為緩慢,面對這類執行時間較長的查詢,我們第一步是先進行資料表本身的效能調校,調校之後如果查詢還是需要一點時間,又剛好我們的資料庫系統是使用 SQL Server 的話,那我們可以考慮為查詢建立 Indexed View
試試看。
上一篇文章大致地了解了 SQL Server 登入及使用者之間的關係,登入只是個開始而已,只是能進到 SQL Server 而已,這時候還不能存取任何資料庫物件,還需要得到授權,要在 SQL Server 授權存取資料庫物件,就不得不提到「使用者(User)
」及「角色(Role)
」。
當我們建立了一個 SQL Server 實例之後,在開始處理資料之前,如果是對資安意識相對高一點的開發者,應該會有一個步驟是為我們的應用程式建立帳號,並且授予相對應的權限,而不會用 sa
走天下,當我們建立了一個登入
時,通常會去使用者對應
的頁面勾選對應的資料庫,此時,SQL Server 也會幫我們建立一個與登入名稱一樣的使用者
,我們可能沒有感覺,但是 SQL Server 的登入及使用者其實是拆開來的。
最近手上的專案有一個需求,使用者想對上傳的檔案(簡報、會議記錄、...等)做關鍵字搜尋,腦中閃過的第一個解決方案是 Elasticsearch(ES),但是這得額外架設服務、撰寫程式將檔案內容送進 ES 做索引,要花錢、花時間,使用者不一定買單,所以我就想到 Windows 檔案總管的搜尋功能能不能拿來用?它背後使用的服務是 Windows Search Service(WSS),下關鍵字去 Google 馬上就找到黑大的文章,感謝黑大。
先前跟大家分享 CTE 遞迴的寫法,在粉絲團貼文的留言中,就有網友分享另一種存放樹狀結構資料的設計方式 - Nested Set Model(巢狀集合模型),這篇文章就來跟大家分享 Nested Set Model 資料表的設計方式。
樹狀的資料結構在日常的程式設計當中挺常見的,舉凡像是留言板
、人事組織
、族譜
、…等,都用得上,但當我們把樹狀結構的資料存進 SQL Server 之後想要撈出來,除了用跑迴圈之外大概就是用遞迴了,迴圈的寫法就不多介紹,本篇文章要來跟大家分享遞迴的寫法。
INSERT or UPDATE
或者有人稱 Upsert
,是一個撰寫資料庫存取應用程式一定會遇到的場景,這個看起來簡單不過的寫入資料邏輯,到了實際真正要施作的時候,是有一些細節需要去注意的,下面我就我所知道的三種 INSERT or UPDATE 的寫法跟各位朋友分享。
我們都知道不應該將密碼以明碼的方式存進資料庫,至少密碼要雜湊(Hash)過才放進資料庫,大多數的人應該都是選擇在應用程式裡面,先將密碼雜湊過,再將密碼存進資料庫內,不過 SQL Server 已經有一套機制來處理密碼雜湊這件事,我們可以放心地交給 SQL Server 自己來處理。
有時候我們會需要額外記錄剛剛刪除或更新的資料,又或者是取得剛剛新增的識別(IDENTITY)欄位的值,拿來當成其他的 SQL 語句的參數,這些事情在 SQL Server 我們都可以透過 OUTPUT
語法幫助我們輕鬆做到。
遇到參數嗅探(Parameter Sniffing)
出問題的時候真的會讓人無力,我們為了避免 SQL Injection
,所以參數化查詢
變成了通則,而正是因為參數化查詢才會有參數嗅探,如果我們是使用 Adhoc 或 Prepared 的方式在下 SQL 語句的話,倒是有一個方法能夠避免因參數嗅探使用到錯誤執行計劃的問題,那就是加入註解
。