Category: SQL

上篇我們觀察到用 GUID 做為叢集索引,INSERT 耗時較久且偶發慢到 4 ~ 6 秒的狀況。 依直覺索引碎片化的影響主要在於讀寫效能不佳(要走過更多資料分頁),但觀察容量計時我發現另一件有趣的事,同樣是一千萬筆資料,IntClustIdx 比 GuidClustIdx 多一個 BIGINT 欄...

我們都知道,資料庫使用 GUID 作為叢集索引易造成索引碎片化影響效能。若要用 GUID 作為 Primary Key,應另設自動跳號數字欄位當叢集索引。(註:不熟悉此議題的同學可先看這篇:GUID Primary Key 資料庫避雷守則) 近期在古蹟專案遇到偶發 INSERT 逾時錯誤(SqlCo...

【前言】關於 SQL 執行計劃如何影響查詢效能議題很久之前研究過了(SQL筆記:Index Scan vs Index Seek、SQL筆記:Literal, Variable與Parameter),昨天研究 網站執行 Stored Procedure 爆慢,在 SSMS 秒回問題找到 SQL Se...

今天學習到新知識 - 資料表欄位進行排序時,遇到 NULL 會怎麼辦?茲針對我平時較會遇到的資料庫:ORACLE、MSSQL 及 SQLite 做個整理。 我弄了一個模擬資料表,用 CorpName, StartDate, EndDate 記錄工作履歷: 查詢條件為「仍在職者(離職日為 NULL)...

要查看 SQL 指令的執行計劃,SSMS 絕對是首選,透過圖形化呈現,效能瓶頸一秒現形。(參考:應用範例) 不過,不是每一台機器都有裝或能裝 SSMS,在沒有安裝工具軟體的環境,要如何用 PowerShell/C# 取得 SQL 查詢的執行計劃呢? SQL 提供幾個控制選項 SET SHOWPLAN...

我們都知道,為 WHERE 條件用到的欄位建立索引可改善查詢效能,假設有 SQL 查詢如下,如果要為它建立索引,請問索引 Key 應包含哪些欄位? SELECT LastName,FirstName,Address,City,State,Zip,Phone FROM Employee WHERE (...

SQL LocalDB 是開發測試 SQL 程式的好夥伴,免費,比 SQL Server 輕巧,行為模式比照標準 SQL Server,很適合裝在開發主機扮演 SQL 資料庫角色。(延伸閱讀:SQL Server 2012 Express LocalDB (SqlLocalDB) 深入剖析 by 保...

調查了一起開發測試過程引發 Windows 稽核失敗事件的案例。 本機不小心在 Visual Studio 啟動了某個測試網站專案,在另一個伺服器留下多筆操作登入使用者登入失敗的 Windows 安全事件: 依據微軟文件,4625 事件用於記錄任何登入失敗,留存在嘗試登入的電腦上。這個事件也是之前...

SQL Server 從很早的版本便支援加密傳輸(早期還支援 SSL,SQL Server 2016 起只支援 TLS),在安全要求較嚴謹的環境可啟用加密連線,保護傳輸內容不被竊聽或攔截(概念上是 HTTP 與 HTTPS 的差異)。(延伸閱讀:啟用資料庫引擎的加密連線 - MS Docs) SSM...

SSMS 有個方便功能,在 Table、View、Function、Stored Procedure 等物件用右鍵選單可以產生建立該物件的 SQL Script。 產生的資料表 Script 連 Description 註解都有,拿到新資料庫執行可建立一模一樣的資料表,十分方便: USE DB_N...

關於資料庫是否該用 Guid 當 Primay Key,正反雙方各有擁護著,使用 Guid 的好處是不需依賴資料庫即可取得唯一識別碼,有助提高系統設計彈性,同時 Guid 無法被猜測具安全防護效果;缺點則是不利人工查詢、消耗儲存空間及當作叢集索引(Clustered Index) 時易導致索引破碎(...

研究 SQL NEWSEQUENTIALID() 時引發一個疑問,Guid 在 .NET、SQL 的排序方式是否相同?是依據什麼規則決定大小? 答案是 .NET 與 SQL Server 排序規則不同。 例如隨機產生三個 Guid,在 .NET 的排序為 87e4077c-a7b7-48d5-b1...