mysql的三正規化:
1nf(第一正規化):字段不可分;
2nf(第二正規化):有主鍵,非主鍵字段依賴主鍵;
3nf(第三正規化):非主鍵字段不能相互依賴;
解釋:1nf:原子性 字段不可再分,否則就不是關聯式資料庫;
2nf:唯一性 乙個表只說明乙個事物;
3nf:每列都與主鍵有直接關係,不存在傳遞依賴;
在企業中很難能做到嚴格意義上的正規化或者反正規化,一般需要混合使用
正規化設計和反正規化設計的案例:
訂單表如果完全按照正規化設計,查詢訂單對應的使用者資訊時,會用到很多聯合查詢;如果用反正規化設計,會明顯提高查詢效率。
**主鍵:與業務無關的,無意義的數字序列,比如:id
自然主鍵:事物屬性中的自然唯一標識,比如:身份證號
它們不與業務耦合,因此更容易維護
乙個大多數表,最好是全部表,通用的鍵策略能夠減少需要編寫的原始碼數量,減少系統的總體擁有成本
mysql字符集
純拉丁字元能表示的內容,沒必要選擇 latin1 之外的其他字元編碼,因為這會節省大量的儲存空間。mysql預設是latin1。
如果我們可以確定不需要存放多種語言,就沒必要非得使用utf8或者其他unicode字元型別,這回造成大量的儲存空間浪費。
mysql的資料型別可以精確到字段,所以當我們需要大型資料庫中存放多位元組資料的時候,可以通過對不同表不同字段使用不同的資料型別來較大程度減小資料儲存量,進而降低 io 操作次數並提高快取命中率。
如果不儲存中文,用latin1就足夠了;如果要儲存中文,就用utf8mb4。utf8mb4是一種最常用的方式。
mysql預設儲存引擎是innodb
被頻繁引用且只能通過 join 2張(或者更多)大表的方式才能得到的獨立字段。
這樣的場景由於每次join僅僅只是為了取得某個小字段的值,join到的記錄又大,會造成大量不必要的 io,完全可以通過空間換取時間的方式來優化。不過,冗餘的同時需要確保資料的一致性不會遭到破壞,確保更新的同時冗餘欄位也被更新。
當我們的表中存在類似於 text 或者是很大的 varchar型別的大字段的時候,如果我們大部分訪問這張表的時候都不需要這個字段,我們就該義無反顧的將其拆分到另外的獨立表中,以減少常用資料所占用的儲存空間。這樣做的乙個明顯好處就是每個資料塊中可以儲存的資料條數可以大大增加,既減少物理 io 次數,也能大大提高記憶體中的快取命中率。
mysql 調優 Mysql調優
表設計 1 禁止使用外來鍵 2 多表中的相同列,必須保證列定義一致 3 國內表預設使用innodb,表字符集預設使用gbk,國際預設使用utf8的表 4 表必須包含gmt create和gmt modified欄位,即表必須包含記錄建立時間和修改時間的字段 5 單錶一到兩年內資料量超過500w或資料...
mysql調優書籍 mysql調優從書寫sql開始
理論知識 mysql 的執行機制 mysql 的sql關鍵字執行順序 1 mysql 的優化方案有哪些?1 mysql 資料庫常見的優化手段分為三個層面 sql 和索引優化 資料庫結構優化 系統硬體優化等 前兩個可以通過日常的書寫sql來實現,養成好的習慣可以事半功倍。2 sql 和索引優化習慣準則...
mysql卡的調優思路 MySQL效能調優思路
1.mysql效能調優思路 如果一台伺服器出現長時間負載過高 週期性負載過大,或偶爾卡住如何來處理?是週期性的變化還是偶爾問題?是伺服器整體效能的問題,還是某單條語句的問題?具體到單條語句,這條語句是在等待上花的時間,還是查詢上花的時間?1.1.監測並觀察伺服器的狀態.觀察伺服器狀態,一般用如下2個...