MySQL表结构设计之范式化和反范式化对比
| ? | 優點 | 缺點 |
| 范式 | 1、范式化的更新操作通常比反范式化要快,只需要修改較少數據。 2、范式化的表通常更小,可以更好地放在內存里,所以執行操作會更快。 | 復雜的查詢語句在符合范式的schema上都可能需要至少一次關聯,關聯表的代價昂貴,也可能使得索引失效 |
| 反范式 | 1、數據都在一張表中,可以避免表關聯,最差情況全表掃描。 2、可以設計有效的索引 | 表格內的冗余較多,刪除數據時候會造成表有些有用的信息丟失;更新操作時需要考慮冗余字段的同步,涉及多表更新操作 |
?
?
?
| ? |
- 實際開發:事實上,完全的范式化和完全的反范式化schema都是實驗室里才有的東西。實際場景中,最常見的反范式化數據的方法是復制或者緩存,在不同的表中存儲相同的特定列。
-
實時計算統計值是非常昂貴的操作,因為要么需要掃描表中的大部分數據,要么查詢語句只能在某些特定的索引上才能有效運行,提升性能常用方法:緩存表和匯總表,但前提是允許少量的臟數據或者一定的實時性偏差。
- 緩存表:對優化和搜索語句使用較多,在同一張表中保存衍生的冗余數據
- 匯總表:主要用在一些累計、統計、匯總場景
-
在使用緩存表和匯總表時,必須決定是實時維護還是定期重建。當重建匯總表的時候,需要保證數據在操作時依然可以使用,這就需要通過影子表來進行實現(重命名替換)。操作:
drop table if exists my_summary_new, my_summary_old;
create table my_summary_new like my_summary;
----- populate test_new as desired
rename table my_summary to my_summary_old,my_summary_new to my_summary;
總結
以上是生活随笔為你收集整理的MySQL表结构设计之范式化和反范式化对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于java开发中的实用工具Hutool
- 下一篇: 在电脑窗口中截取长图/滚动截图