數(shù)據(jù)庫技術演進之路
作者:greencoatman
規(guī)范化有第一范式(1NF):確保每列都是原子的,不可再分;第二范式(2NF):消除非主屬性對主鍵部分依賴,確保每列都依賴于整個主鍵;第三范式(3NF):消除傳遞依賴,確保每列都直接依賴于主鍵。
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
- SQL解析:攔截和解析應用程序的SQL語句,確定目標數(shù)據(jù)源和分片規(guī)則。
- 路由:根據(jù)分片策略(如范圍分片、哈希分片等),將SQL語句路由到相應的數(shù)據(jù)節(jié)點。
- 執(zhí)行引擎:將路由后的SQL語句分發(fā)到各個分片進行并行執(zhí)行。
- 結果合并:對各個分片的執(zhí)行結果進行合并、排序、聚合等操作,返回給應用程序。
圖片
圖片
圖片
圖片
圖片
- 索引:缺乏適當?shù)乃饕蛩饕O計不當會導致全表掃描,增加查詢時間。
- 查詢設計:復雜的查詢、子查詢、多表連接等可能會影響性能。
- 表設計:表的規(guī)范化程度、數(shù)據(jù)冗余、表的大小等都可能影響性能。
- 硬件資源:CPU、內存、磁盤I/O等硬件資源不足會導致性能瓶頸。
- 并發(fā)量:高并發(fā)訪問會導致資源競爭和鎖等待。
- 網(wǎng)絡延遲:網(wǎng)絡傳輸速度慢也會影響查詢性能。
圖片
圖片
圖片
圖片
圖片
圖片
圖片
1.規(guī)范化和反規(guī)范化:
- 規(guī)范化:減少數(shù)據(jù)冗余,確保數(shù)據(jù)一致性。
- 反規(guī)范化:在查詢性能優(yōu)先時,適當引入冗余來減少連接操作。
2.索引設計:
- 創(chuàng)建適當?shù)乃饕绕涫侵麈I、外鍵和常用查詢字段的索引。
- 使用復合索引提高多列查詢的效率。
3.表結構優(yōu)化:
- 選擇合適的數(shù)據(jù)類型,避免過大或不必要的精度。
- 分區(qū)表設計,適用于大數(shù)據(jù)量的表,按日期、地域等維度分區(qū)。
4.關系設計:
- 清晰定義外鍵和參照完整性,確保數(shù)據(jù)關系的正確性。
- 考慮表的分區(qū)、合并等操作,優(yōu)化存儲和查詢性能。
5.事務管理:
- 設計良好的事務管理,確保數(shù)據(jù)一致性和并發(fā)性。
- 避免長事務,減少鎖競爭。
6.數(shù)據(jù)庫配置:
- 調整數(shù)據(jù)庫參數(shù),如緩存大小、連接池設置等,優(yōu)化數(shù)據(jù)庫性能。
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
圖片
1. 規(guī)范化
- 第一范式(1NF):確保每列都是原子的,不可再分。
- 第二范式(2NF):消除非主屬性對主鍵部分依賴,確保每列都依賴于整個主鍵。
- 第三范式(3NF):消除傳遞依賴,確保每列都直接依賴于主鍵。
2. 反規(guī)范化
- 在某些情況下,為提高查詢性能,可以適當反規(guī)范化,加入冗余數(shù)據(jù),減少復雜查詢和連接操作。
3. 適當使用外鍵
- 外鍵可以確保數(shù)據(jù)完整性,但在高并發(fā)寫操作中可能影響性能,需權衡使用。
4. 分區(qū)和分表
- 對于大表,根據(jù)業(yè)務需求按時間、地域等維度進行分區(qū)或分表,提升查詢效率和管理方便性。
5. 使用視圖和物化視圖
- 視圖可以簡化復雜查詢,物化視圖存儲查詢結果,提升查詢性能。
6. 優(yōu)化字段類型
- 根據(jù)數(shù)據(jù)特點選擇合適的數(shù)據(jù)類型,盡量使用定長字段,減少存儲空間和 I/O 操作。
7. 預計算和緩存
- 對頻繁使用的復雜計算結果進行預計算或緩存,減少實時計算開銷。
8. 設計高效的主鍵
- 使用自增主鍵或 UUID 作為主鍵,確保唯一性和檢索效率。
圖片
圖片
圖片
圖片
1. 選擇合適的索引類型
- 單列索引:針對單個字段創(chuàng)建索引。
- 復合索引:對多個字段聯(lián)合創(chuàng)建索引,適用于多列查詢。
2. 使用覆蓋索引
- 設計索引時,包含查詢中需要的所有字段,減少回表操作。
3. 避免冗余索引
- 避免對相同字段或字段組合創(chuàng)建多個索引,以節(jié)省存儲和維護成本。
4. 適當使用唯一索引
- 對唯一值的列(如身份證號、郵箱等)使用唯一索引,提高查詢效率和數(shù)據(jù)完整性。
5. 考慮查詢模式
- 分析常見查詢語句,針對頻繁使用的查詢條件和排序條件創(chuàng)建索引。
6. 優(yōu)化索引的選擇性
- 選擇性高的列(即不同值多的列)更適合作為索引字段,過濾效果更好。
7. 維護和重建索引
- 定期維護索引,重建碎片化嚴重的索引,保持索引高效。
8. 避免過多的索引
- 每張表索引數(shù)量不宜過多,以免增加插入、更新和刪除操作的開銷。
圖片
圖片
圖片
圖片
責任編輯:武曉燕
來源:
二進制跳動