數據庫的三範式及mysql的InnoDB 和MyISAM區別

記錄些基礎的東西

數據庫設計三範式

在我們設計數據庫時,要遵循最基本的三範式

第一範式:關係型數據庫,每條字段信息不可分解,可以理解爲數據都有原子性
舉例:數據庫中有address這個字段,但我們常常將它分解爲province,city,area,這樣算是數據庫第一範式

第二範式:在1NF的基礎上,每條數據都是唯一的,也就是說每條數據都有primary key與其對應。要求實體的屬性完全依賴於primary key。所謂完全依賴是指不能存在僅依賴主primary key一部分的屬性

第三範式:在2NF的基礎上,個人理解就是數據表中不能有冗餘數據。

反三範式舉例:
數據庫中有張相冊表ablum_info,相冊表有主鍵id,然後相片中有自己的主鍵id,外鍵ablum_id,瀏覽次數view_count。然後我們需要得到某個相冊的總瀏覽次數,我們可以通過sum(view_count)實現,但是我們經常是將view_count冗餘到相冊表。

InnoDB 和MyISAM

MyISAM快讀,InnoDB完全的事務支持,前者注重性能,後者注重事務。

事實並不是這樣,mysql在高併發狀態下性能瓶頸很明顯,主要原因是鎖機制導致的堵塞

MyISAM採用的是全表鎖定,而InnoDB採用的是行級鎖。行級鎖要比表級鎖更加耗內存。

但是在系統併發訪問量較高時,InnoDB的性能要優於MyISAM 同時 。InnoDB的索引不僅緩存索引本身,也緩存數據,所以

InnoDB需要更大的內存。

選擇合適的存儲引擎是優化的第一步

R/W概念,讀寫比概念

在數據庫中執行 show global status得到系統的當前狀態。在這些變量中, 形如com_xxx語句表示XXX語句執行的

次數,如com_select代表select執行的次數,以此類推。通過計算讀類型和寫類型的語句比例,即可粗糙的確定一個

讀寫比例。理想的讀寫比例是 100:1 當讀寫比例達到10:1時,就認爲是以寫爲主的數據庫了。一般來說,這個值在30:1左右。

選擇存儲引擎的基本原則:

1 採用MyISAM 引擎

  • R/w>100:1且update相對較少
  • 併發不高,不需要事務
  • 表數據量小
  • 硬件資源有限

2 採用InnoDB引擎

  • R/w比較小,頻繁更新大字段
  • 表數據量超過1000萬,併發高
  • 安全性和可用性要求高
發佈了22 篇原創文章 · 獲贊 37 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章