Schema與資料型別優化

2021-08-20 05:21:33 字數 1461 閱讀 1341

選擇優化的資料型別

1.更小的通常更好

一般情況下,應該盡量使用可以正確儲存資料的最小資料型別。因為它們占用更少的磁碟。記憶體和cpu快取,並且處理時需要的cpu週期也更少

2.簡單就好

簡單資料型別的操作通常需要更少的cpu週期

3.盡量避免null

通常情況下最好指定列為not null。

通常把可為null的列改為not null帶來的效能提公升比較小,所以這並不是調優的首選項。如果計畫在列上建索引,就應該盡量避免設計成可為null的列

一些資料型別的優化選擇

1.整數計算一般選擇64位的bigint。

2.實數型別一般選擇double,如果是財務系統或者需要小數精確運算的則需要decimal

3.字串一般選擇varchar變長字串,比定長字串更節省空間,因為它僅使用必要的空間。char適合儲存很短的字串,或者所有值都接近同乙個長度

4.blob和text為儲存大資料而設計的字串資料型別,分別採用二進位制和字元方式存。。mysql不能將blob和text列的全部長度建立索引

5.日期datetime 8個位元組,timestamp 4個位元組,前者儲存更大的範圍

6.選擇整數型別作為識別符號型別,因為快且可以使用auto_increment

7.特殊資料型別:ip位址,人們通常使用varchar(15)列來儲存ip位址,然而它們實際上只是32位無符號數,不是字串,所以應該使用無符號整數儲存ip位址。mysql提供inet_aton()和inet_ntoa()函式在這兩種表示方法之間轉換

mysql schema設計中的陷阱

1.太多的列。

mysql的儲存引擎api工作時需要在伺服器層和儲存引擎層之間通過行緩衝格式拷貝資料,然後在伺服器層將緩衝內容解碼成各個列。從行緩衝中將編碼過的列轉換成行資料結構的操作代價是非常高的。

2.太多的關聯

mysql限制每個關聯操作最多只有61張表。乙個粗略的經驗法則,如果希望查詢執行得快且併發性好,單個查詢最好在12個表以內做關聯

3.防止過多的列舉

正規化和反正規化

優點:

正規化化的更新快;重複資料很少或者基本沒有,所以只需要修改更少的資料;表通常更小,可以更好的放在記憶體裡,所以執行操作會更快

缺點:

通常需要關聯。稍微複雜一些的查詢語句在符合正規化的schema上都可能需要至少一次關聯,也許更多。

優點:

很好的避免關聯,查詢會更快;單獨的表也能使用更有效的索引策略。

缺點:

資料重複,所以修改複雜;更新也會慢;表通常會比較大

alter table

大部分情況下,它都會鎖表並且重建整張表。

Schema與資料型別優化

關於資料型別選擇的一些記錄 tinyint 8 smallint 16 mediumint 24 int 32 bigint 64 可選屬性 unsigned。mysql可以為整型指定寬度,如int 11 但大多數時候沒有意義,只是規定了一些互動工具用來顯示字元的個數。從mysql4.1開始,每個字...

Schema與資料型別優化

關於整數型別 1.整數型別都有可選的unsigned,表示不允許負值。2.為整數型別指定顯示寬度是沒有意義的,只會控制客戶端顯示字元的個數。關於實數型別 1.不精確型別 float,double 精確型別 decimal 2.cpu不支援對decimal進行直接運算,可以直接對浮點進行運算 同時,d...

Schema與資料型別優化

schema 是資料庫物件的集合 比如使用者建立了表,索引,檢視,儲存過程等物件,那麼這些物件就構成了schema 應根據系統將要執行的查詢語句來設計schema,往往需要權衡各種因素。反正規化的設計可以加快某些型別的查詢 同時可能使另一些型別的查詢變慢 新增計數表和彙總表可以優化查詢 這些表的維護...