前言假如要判斷資料是否存在於資料表中,存在就更新,不存在就新增. 這時我們可以使用Merge來幫助我們完成. 當兩個資料表有複雜的比對的特性時,MERGE陳述式的條件式行為表現最佳。 有了Merge我們就不用使用IF EXISTS. 一切都是這麼完美… 直到到有一天Merge在Prod撞到一個問 ...
ACID
前言資料庫系統在寫入或新增資料時,為了確保交易正確可靠性,所以具備 原子性(atomicity,稱不可分割性) 一致性(consistency) 隔離性(isolation,稱獨立性) 持久性(durability) 這就是我們說的ACID. 下面我會跟大家簡述ACID. Atomicity(原 ...
那些年String.Format中的Boxing和UnBoxing
前言:下面有兩個虛擬程式碼 int times = 30000000;string s = string.Empty;s = $"{times}";s = $"{times.ToString()}"; 請問下面這兩段程式碼有沒有差別? s = $"{ ...
C# Boxing vs UnBoxing
前言:Boxing跟UnBoxing在.net中,我們可能在無意識使用到但這個事情確會造成一些效能影響… .NET兩種類型在.NET有分兩種類型 值類型(int,double,char….) 參考類型(自行宣告的類別,string….) 而存放資料的方式也有兩種: 堆疊Stack 堆積He ...
影響Query Optimizer產生執行計畫的關鍵(統計值)
什麼是統計值SQL Server的QO(Query Optimizer)透過cost-based model來選擇一個最合適計畫(估算成本最低)來執行查詢 注意每個執行計畫是使用CPU來做估算,使用過的執行計畫一般會Cache起來已便下次使用 QO會依照基數估計(Cardinality est ...
Appveyor搭配Github自動化上傳Nuget
前文現在CICD越來越普遍,如要提高開發效率和自動化部屬跟Deploy系統有密不可分關係. 今天跟大家分享我開源專案ElectronicInvoice_TW如何利用Github + Appveyor 來完成自動Deploy Package至Nuget上. 關於AppveyorAppveyor是一個C ...
SqlServer資料表深入淺出
前文本篇會跟大家對於SQL-Server資料表深入淺出的介紹. 關於子頁層資料會存在子頁層中(page),一個Page大小為 8K/Page => 8092(8060 bytes) 每個Page除了存取資料還會存放一些MetaData,我們可以先當作是每個Page大小是8K Heap資料表 ...
撰寫SQL的建議
Agenda 前文 前文本篇會分享在撰寫SQL時建議和比較分享 永遠先考慮T-SQL改寫 符合SARG Statement進行撰寫 <、>、=、<=、>=、LIKE(視%所在位置,前面有%讓DB engine選擇不走INDEX) 不要在Where欄位做運算 使 ...
資料庫索引深入淺出(二)
Agenda 前文 Covering Index 加入INCLUDE欄位含意 案例解說 Filter Index filter index的限制 Index Intersection Primary Key 選擇Clustered Index要訣 前文本系列文章 資料庫索引深入淺出(一) 資 ...
資料庫索引深入淺出(一)
前文Index第一個欄位至關重要它會影響資料統計值結果,Index一般建立在查詢條件的欄位 每個Index都擁有自己的B+ tree. Index使用的資料結構(B+ tree)B+ tree是一種資料結構這個資料結構被Index拿來使用,關於B+ tree網路上有很多資源可再自行尋找,所以我們 ...