---
# System prepended metadata

title: Table 的 Id 到底用 int 好 還是 varchar(36) Guid 好？
tags: [SQL]

---

# Table 的 Id 到底用 int 好 還是 varchar(36) Guid 好？
###### tags: `SQL`

## 用 int 的優缺點
* 優點：索引，儲存空間較小，搜尋較快
* 缺點：同時寫入相同 key 的問題，需要特別寫一個 Seqno manager

### 如何實現 Seqno manager ?
#### DB 部分
* 建立一個 Table => tblSeqNoManager
* 欄位 => TableName、SeqNo
* 使用概念 => 所有 Table 的 SeqNo 都從這個 tblSeqNoManager 取得，取得後必須將對應的 Table SeqNo 數字+1
* <span style="color:red">**必須用另一個 DB 連線，取完馬上寫入！！**</span>

#### Code 部分 ( 大概的感覺 )
```
public class SeqNoManager{
    public string TableName { get; set; }
    public int SeqNo { get; set; }
    
    public int GetSeqNo(string tableName){
        // 判斷是否存在此 Table 的資料，若不存在建立新 Table
        if(IsTableExist(tableName)){
             // 依照 Table 名稱取得流水號 ...
             return seqNo;
        }
        else{
            AddTable();
            return 1;
        }
    }
    
    private bool IsTableExist(string tableName){
        // Do Something...   
    }
    
    private void AddTable(string tableName){
        // Do Something...
    }    
}
```

--- 

## 用 Guid 的優缺點
* 優點：沒有同時寫入相同 key 的問題
* 缺點：索引問題，儲存空間較大，搜尋較慢

### 嘗試解決 Guid 索引問題
[[C#]產生順序GUID](https://dotblogs.com.tw/ricochen/2014/08/26/146371)