2016-10-26 09:00
李富強
1.數據庫表設計技巧
1.1 三個范式
1NF:原子性,屬性不可拆分
2NF:實體的唯一性,沒有兩行一模一樣的數據
3NF:不允許冗余,但在實際工作中可以存在適當的冗余以提升SQL性能
1.2 識別與處理多對多的關系
在多對多的關系中可以引入一個關系表
1.3 主鍵的取值方法
主鍵(聚集索引)最好用int類型
組合主鍵最多2個字段
1.4 字段類型的選擇
int 最大值2億
bigint 基本用不到最大值
業務需求允許的情況下日期字段最好選擇int字段類型(?為什么)
表中不常用的字段最好拆分到單獨的表存放
2.如何寫出高效的SQL
2.1 在生產環境中最好不要出現select *
nvarchar(max)主從同步的時候易出錯
優點:方便擴展
缺點:造成額外的書簽查找或是由查找變為掃描
2.2 查詢或者更新刪除最好用top()
避免忘記寫where條件時造成的誤操作
2.3 查詢要加with(nolock)
十五的隔離性被降低了
可能造成臟讀,但不會造成堵塞
2.4 聲明變量時指定長度
對T-SQL來說,不指定長度,默認長度為1,所以如果不指明長度的話容易造成變量值被截斷
2.5 使用Schema前綴來選擇表
不指定Schema會導致重編,小號CPU資源
2.5 字段不要放到函數中作為查詢條件
即使字段有索引也用不了索引,導致SQL效率低
SQL的函數可以放到程序中去實現
2.6 避免字段發生隱式轉換
where條件中,給字段賦的值要和字段的類型一直
2.7 SQL禁止使用 like '%××' 或者not like '%××'
這樣的SQL不走索引,很耗CPU資源
%放在后面的可以走索引
2.8 如果id是自增長的主鍵,order by id desc 的效率比order by createtime desc 要高
2.9 比較復雜的邏輯在程序中進行處理
- 聚集索引和非聚集索引的區別
聚集索引:表中各行的物理順序與鍵值的邏輯......
4.如何創建合適的索引
sqlserver創建主鍵時,默認創建聚集索引
5.表連接中的on條件和where條件
on條件在join運算前過濾
where條件在join之后過濾
推薦:keypress開源的密碼管理工具