1.定義列時,儘量定義爲not null類型,可以爲空的列索引 內存 cpu 保存都特別麻煩。
2.在查找表時採用整數主鍵而避免採用基於字符串的值進行關聯。
3.爲標識列選擇合適的數據類型非常重要。
3.1. 當選擇標識列的類型時,不僅僅需要考慮【儲存類型】 還需要考慮mysql 對
【這種類型怎麼執行計算和比較】。
例如:mysql 內部使用整數儲存ENUM和SET類型,比較的時候轉換爲字符串。
3.2.一旦選擇一種類型,要確保在所有的關聯表中都使用相同的類型,類型之間要精確匹配,包括想UNSIGNED這樣的屬性。
3.3.如果可能,應該儘量避免使用字符串作爲標識列,因爲他們很消耗空間【索引空間】,並且比數字類型慢。
要完全避免隨機的字符串,--【導致update 和 insert 語句很慢】
3.3.1.因爲插入值會隨機寫到索引的不同位置,導致使得insert 語句更慢。
3.3.2.select 語句會變得很慢,因爲邏輯上相鄰的行會分佈在磁盤和內存的不同位置。
3.3.3隨機導致緩存對所有類型的查詢語句效果都很差。
4.Mysql限制了每個關聯操作最多隻能有61張表,如果希望查詢執行的快速且併發性好,每個查詢最好在12張表以內做關聯。
5.範式的優點和缺點
5.1.範式化的更新操作通常比反範式要快
5.2 當數據較好的範式化時,就至於很少的重複數據,所以只需要修改更少的數據。
5.3範式化的表通常更小,可以更好的放入到內存中,所以操作更快。
範式化設計的schema的缺點通常需要關聯,稍微複雜一些的查詢在符合範式的schema上都可能需要至少一次關聯。
6.加快alter table 操作的速度
MYSQL 的ALTER TABLE 操作的性能對於大表來說是個大問題。MYSQL執行大部分修改表結構操作的方法
是用新的結構創建一個空表,從舊錶查出所有數據插入新表,然後刪除舊錶