影響mysql資料庫的因素
伺服器硬體
作業系統
mysql伺服器配置
資料庫結構(影響最大)
良好的資料庫邏輯設計和物理設計是資料庫獲得高效能的基礎
資料庫結構優化的目的
減少資料的冗餘
盡量避免資料維護**現 更新、插入、刪除異常
節約資料儲存空間
資料庫結構設計的步驟
需求分析:全面了解產品設計的儲存需求
邏輯設計:設計資料的邏輯儲存結構
物理設計:根據所使用的資料庫特點進行表結構設計
維護優化:根據實際情況對索引、儲存結構等進行優化
資料庫設計正規化
資料庫設計的第一正規化:
資料庫表中的所有欄位都具有單一屬性(即欄位不能再分割了)
單一屬性的列是由基本資料型別所構成的
設計出來的表都是簡單的二維表
資料庫設計的第二正規化:
第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。
資料庫設計的第三正規化:
首先要滿足第二正規化,其次非主屬性之間不存在函式依賴。由於滿足了第二正規化,表示每個非主屬性都函式依賴於主鍵。如果非主屬性之間存在了函式依賴,就會存在傳遞依賴,這樣就不滿足第三正規化。
總結:第一正規化就是原子性,字段不可再分割;
第二正規化就是完全依賴,沒有部分依賴;
第三正規化就是沒有傳遞依賴
反正規化化設計
反正規化化就是為了效能和讀取效率的考慮而適當的對資料庫設計正規化的要求進行違反,而允許存在少量的資料冗餘,也就是使用空間來換取(查詢)時間
不能要求完全按照正規化化的要求進行資料庫設計,要考慮以後表的使用(查詢等)
舉個例子:比如訂單表中應該保留當前購買商品的**、商品的名稱(商品的**是會變動的,這很危險)
正規化化設計的優缺點
優點:可以盡量的減少資料冗餘
正規化化的更新操作比反正規化化更快
正規化化的表通常比反正規化化更小
缺點:對於查詢需要關聯多個表
更難進行索引優化
反正規化化設計的優缺點
優點:可以減少表的關聯
可以更好的進行索引優化
缺點:存在資料冗餘和資料維護異常
對資料修改需要更多的成本
資料庫物理設計
定義資料庫、表及字段的命名規範
選擇合適的儲存引擎
為表中的字段選擇合適的儲存引擎
建立資料庫表
定義資料庫、表及字段的命名規範
資料庫、表、欄位的命名要遵守可讀性原則
資料庫、表、欄位的命名要遵守表意性原則(採用英文,且意思準確)
資料庫、表、欄位的命名要遵守長名原則(盡量不要使用縮寫)
選擇合適的儲存引擎
物理設計-資料型別的選擇
為表中字段選擇合適的資料型別:
當乙個列可以選擇多種資料型別時,應該優先考慮數字型別,其次是日期型別或二進位制型別,最後是字元型別。對於相同級別的資料型別,應該優先選擇占用空間小的資料型別
如何選擇正確的整數型別
如何選擇正確的實數型別
如何選擇varchar和char型別
varchar型別特點:
varchar和char是以字元為單位的,不是位元組。乙個字元可能占用多個位元組
varchar用於儲存變長字串,只占用的必要的儲存空間。
char型別特點:
char型別是定長的
字串儲存在char型別的列中會刪除末尾的空格
char型別的最大寬度為255
varchar使用場景:
適用於儲存很少被更新的字串列
char使用場景:
適合儲存長度近似的值
適合儲存短字串
適合儲存經常更新的字串
如何儲存日期型別
datatime型別
datatime型別與時區無關,占用8個位元組的儲存空間
儲存範圍為1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
如果需要儲存微秒時間,則需要指定寬度,比如datetime(6)
timestamp型別
timestamp型別占用4個位元組,顯示依賴於所指定的時區
範圍為1970-01-01 08:00:01到2038-01-19 11:14:07
timestamp支援的範圍比datatime要小,容易出現超出的情況
timestamp型別在預設情況下,insert、update 資料時,timestamp列會自動以當前時間(current_timestamp)填充/更新。
timestamp比較受時區timezone的影響以及mysql版本和伺服器的sql mode的影響
date型別和time型別
占用位元組比字串、datetime、int儲存型別要少,使用date型別只需要3個 位元組
使用date型別還可以利用日期和時間函式進行日期之間的計算
僅有日期值,沒有時間部分。以』yyyy-mm-dd』格式顯示date值,支援的範圍是』1000-01-01』到』9999-12-31』。
time資料型別表示一天中的時間。以」hh:mm:ss」格式顯示time值。支援的範圍是』00:00:00』到』23:59:59』。
使用日期時間儲存型別注意事項
不要使用字串型別來儲存日期、時間資料,日期時間型別通常比字串占用更少的儲存空間
日期時間型別在進行查詢過濾時,可利用日期來進行對比
日期時間型別有豐富的處理函式,可以方便的對日期型別進行計算
使用int儲存日期時間,不如使用timestamp
mysql結構優化 mysql結構優化
影響資料庫效能的因素 資料庫結構 最大的 伺服器硬體,作業系統 mysql伺服器配置 良好的資料庫邏輯設計和物理設計,是獲得高效能的基礎。設計資料庫結構,不僅僅是考慮到 業務需求,還有考慮到以後需要用到的哪些查詢語句進行查詢,進而進行設計資料庫結構。優化資料庫結構,可以使查詢的語句盡量的簡單。這樣需...
MySQL優化 表結構
資料型別 簡單的原則 1 更小的通常最好 why 更小的資料型別會占用更小的磁碟,記憶體和cpu快取,會產生更小的索引,處理時cpu週期更少。2 簡單就好 整數好於字串。why 整型比字元操作代價更低,因為字符集的排序規則使字元比較比整型比較更複雜。3 盡量避免null值 如何儲存null值,索引如...
Mysql 表結構優化
一 資料型別的選擇 簡單規則 1 字元長度設定更小更好 2 型別越簡單越好,越簡單使用的cpu越少 比如儲存時間字段採用varchar型別與datatime型別對比 3 盡量避免使用null 因為可為null的列使得索引 索引統計和值比較都更加複雜 實際細節 1 整型 tinyint,smallin...