MySQL 數據庫牛 彩源碼下載設計總結
規則2:命名規則。
數據庫和表名應盡可能和所服務的業務模塊名一致
服務與同一個子模塊的一類表應盡量以子模塊名(或部分單詞)為前綴或後綴
表名應盡量包含與所存放數據對應的單詞
字段名稱也應盡量保持和實際數據相對應
約束等其他對象也應該盡可能包含所屬表或其他對象的名稱,以表明各自的關系
規則3:數據庫字段類型定義
經常需要計算和排序等消耗CPU的字段,應該盡量選擇更為迅速的字段,如用TIMESTAMP(4個字節,最小值1970-01-01 00:00:00)代替Datetime(8個字節,最小值1001-01-01 00:00:00),通過整型替代浮點型和字符型
變長字段使用varchar,不要使用char
對於二進制多媒體數據,流水隊列數據(如日誌),超大文本數據不要放在數據庫字段中
規則5:並不需要一定遵守範式理論,適度的冗余,讓Query盡量減少Join
規則6:訪問頻率較低的大字段拆分出數據表。有些大字段占用空間多,訪問頻率較其他字段明顯要少很多,這種情況進行拆分,頻繁的查詢中就不需要讀取大字段,造成IO資源的浪費。
規則7:大表可以考慮水平拆分。大表影響查詢效率,根據業務特性有很多拆分方式,像根據時間遞增的數據,可以根據時間來分。以id劃分的數據,可根據id%數據庫個數的方式來拆分。
一.數據庫索引
規則8:業務需要的相關索引是根據實際的設計所構造sql語句的where條件來確定的,業務不需要的不要建索引,不允許在聯合索引(或主鍵)中存在多於的字段。特別是該字段根本不會在條件語句中出現。
規則9:唯一確定一條記錄的一個字段或多個字段要建立主鍵或者唯一索引,不能唯一確定一條記錄,為了提高查詢效率建普通索引
規則10:業務使用的表,有些記錄數很少,甚至只有一條記錄,為了約束的需要,也要建立索引或者設置主鍵。
規則11:對於取值不能重復,經常作為查詢條件的字段,應該建唯一索引(主鍵默認唯一索引),並且將查詢條件中該字段的條件置於第一個位置。沒有必要再建立與該字段有關的聯合索引。
規則12:對於經常查詢的字段,其值不唯一,也應該考慮建立普通索引,查詢語句中該字段條件置於第一個位置,對聯合索引處理的方法同樣。
規則13:業務通過不唯一索引訪問數據時,需要考慮通過該索引值返回的記錄稠密度,原則上可能的稠密度最大不能高於0.2,如果稠密度太大,則不合適建立索引了。
當通過這個索引查找得到的數據量占到表內所有數據的20%以上時,則需要考慮建立該索引的代價,同時由於索引掃描產生的都是隨機I/O,生其效率比全表順序掃描的順序I/O低很多。數據庫系統優化query的時候有可能不會用到這個索引。
規則14:需要聯合索引(或聯合主鍵)的數據庫要註意索引的順序。SQL語句中的匹配條件也要跟索引的順序保持一致。
MySQL 數據庫牛 彩源碼下載設計總結