學習文檔
自己整理:數據庫調優
SQL server和MySql簡單對比
SQL server
- Windows首選,跨平台性不好
- 重量級
- 功能豐富,性能略優
- 不開源
MySql
- Linux首選,跨平台性好
- 輕量級
- 功能少一點,性能略差
- 開源
數據庫設計
表
主鍵
主鍵必須是唯一的,且要依賴索引,可以是聚集索引或者非聚集索引
索引
聚集索引
聚集索引基於聚集索引鍵按順序排序和存儲表或視圖中的數據行。 聚集索引按 B 樹索引結構實現,B 樹索引結構支持基於聚集索引鍵值對行進行快速檢索。
一個表只能有一個聚集索引
參考:B樹、B+樹詳解
非聚集索引
非聚集索引中的每個索引行都包含非聚集鍵值和行定位符。 此定位符指向聚集索引或堆中包含該鍵值的數據行。 索引中的行按索引鍵值的順序存儲,但是不保證數據行按任何特定順序存儲,除非對表創建聚集索引。
堆(沒有聚集索引的表)
列存儲索引
- 大數據超長字段的模糊搜索like '%%'超快
- 更新陳本高:適合更新不太頻繁的表
分區表、分表、分庫
參考:
阿里P8架構師談:數據庫分庫分表、讀寫分離的原理實現,使用場景
分區表
參考:
概念:分區表是將大表的數據分成稱為分區的許多小的子集,類型有FAT16,FAT32,NTFS,exFAT,Ext2/3/4,HFS+,VMFS。另外,分區表的種類划分主要有:range(范圍)、list(列表)和hash(散列)分區。划分依據主要是根據其表內部屬性。同時,分區表可以創建其獨特的分區索引。倘若硬盤丟失了分區表,數據就無法按順序讀取和寫入,導致無法操作。
適合場景:
- 單張表數據達到千萬級別的時候考慮分區表,一般按年或者按月分
- 歷史數據不常用,一般只用最近日期數據的表,例如與時間有關的表:打卡記錄表、日志、消費記錄等
分表
適合場景:
- 大數據量且訪問頻繁的表
分庫
Transact-SQL (T-SQL)
查詢
WITH common_table_expression(CTE)
概念:指定臨時命名的結果集,這些結果集稱為公用表表達式 (CTE)
使用范圍:可用於查詢語句、函數、視圖、存儲過程、觸發器
優點:
- 提高代碼可讀性
- 復用,提高性能
- 可遞歸 (注意:默認遞歸次數是100,不建議更改此項,避免死循環)
分頁
參考:
XML
事務
參考:
鎖
安全性
管理、監視和優化
管理
監視
優化
架構 SCHEMA
可以自定義架構,預定義的架構有:
- dbo:最常見,表、視圖、存儲過程、函數等,默認都是使用dbo架構
- sys
- guest
- INFORMATION_SCHEMA