1.區分業務主鍵合和數據庫主鍵
業務主鍵用於標識業務數據,進行表與表之間的關聯;
數據庫主鍵爲了優化數據存儲(Innodb會生成6個字節的隱含主鍵)
2.根據數據庫的類型,考慮主鍵是否要順序增加
有些數據庫是按住建的順序邏輯存儲的(順序增加對IO有幫助)
3.主鍵的字段類型所佔空間要儘量的小
對於使用匯集索引方式存儲的表,每一個索引後都會附加主鍵信息。數據庫
1.下降數據導入的效率
2.增長維護成本
3.雖然不建議使用外鍵約束,可是相關聯的列上必定要創建索引 函數
1.下降數據導入的效率。
2.可能會出現意想不到的數據異常。
3.使業務邏輯變複雜。工具
1.沒法準確的知道預留字段的類型
2.沒法準確的指導預留字段中所存儲的內容。
3.後期維護預留字段所要的成本,同增長一個字段所須要的成本是相同的。
4.嚴禁使用預留字段。性能
反範式化是針對範式化而言的,就是打破第三範式的規定,
爲了性能和讀取效率的考慮而適當的對第三範式的要求進行違反,
而容許存在少許的數據冗餘,換句話來講:反範式化就是實用空間來換取時間。優化
1.減小表的關聯數量
2.增長數據的讀取效率
3.反範式化必定要適度spa
維護和優化要作什麼
1.維護數據字典
2.維護索引
3.維護表結構
4.在適當的時候對錶進行水平拆分或垂直拆分設計
如何維護數據字典
1.使用第三方工具對數據字典進行維護
2.利用數據庫自己的備註字段來維護數據字典。以MySQL爲例 (COMMENT)增長註釋索引
如何維護索引
如何選擇合適的列創建索引?
1.出如今WHERE從句,GROUP BY 從句, ORDER BY 從句中的列
2.可選擇性高的列要放在索引的前面
3.索引中不要包括太長的數據類型
注意事項:
1.索引並非越多越好,過多的索引不但會下降寫效率並且會下降讀的效率
2.按期維護索引碎片
3.在SQL語句中不要使用強制索引關鍵字效率
維護表結構
注意事項:
1.使用在線變動表結構的工具
2.同時對數據字典進行維護
3.控制表的寬度和大小
數據庫中適合的操做
1.批量操做 VS 逐條操做
2.禁止使用Select * 這樣的查詢
3.控制使用用戶定義函數
4.不要使用數據庫中的全文索引
表的垂直拆分
爲了控制表的寬度能夠進行表的垂直拆分
好處:優化了I/O讀取效率 由於數據庫是以頁的形式存儲的,行越多就越快,
可是列的增長就會是的寬度增長,行數很少,因此垂直拆分也減少了表的寬度
1.常常一塊兒查詢的列放在一塊兒
2.text,blob等大字段拆分到附加表中數據類型
表的水平拆分 爲了控制表的大小能夠進行表的水平拆分 解決了數據量大多的問題