Schema與資料型別優化 高效能MySQL

2021-08-19 17:12:42 字數 1282 閱讀 9210

關於資料型別選擇的一些記錄

tinyint(8), smallint(16), mediumint(24), int(32), bigint(64) 可選屬性:unsigned。mysql可以為整型指定寬度,如int(11),但大多數時候沒有意義,只是規定了一些互動工具用來顯示字元的個數。

從mysql4.1開始,每個字串列可以自定義自己的字符集和排序規則,或者說校對規則,這些東西對效能影響很大。

儲存uuid值應當移除「-」符號,或者更好的做法是用unhex()函式轉換為16位元組的數字,儲存在binary(16)列中,查詢的時候通過hex()來格式化為16進製制格式。uuid值雖然分布也不均勻,但是還是有一定順序。

正規化缺點:

反正規化優點:

反正規化缺點:

這個感覺就看具體需求了,對於快取或者彙總的資料實時性要求有多高,然後採取不同的策略。

影子表:是指在一張真是表「背後」建立同樣的表,然後建好之後通過原子的重新命名操作切換。

mysql> drop table if exists my_summary_new, my_summary_old;

mysql> create table my_summary_new like my_summary;

mysql> rename table my_summary to my_summary_old, my_summary_new to my_summary;

mysql並不支援物化檢視,可是使用開源工具flexviews來實現。

alter table一般都很慢,操作將導致mysql服務中斷。一般來說是會新建個表,然後從舊表讀取資料插入到新錶中,這樣效率很慢。

但並不是所有的都這麼慢,比如修改乙個列的預設值有兩種辦法:

mysql> alter table film modify column rental_duration tinyint(3) not null default 5;

mysql> alter table file alter column rental_duration tinyint(3) not null default 5

第一種方法是通過上面所說的讀取插入的方式。 第二種方法會直接修改.frm檔案不涉及資料,所以很快。

下面有一些修改表的操作是不需要重建表的:

基本思路是為想要的表結構建立乙個新的.frm檔案,然後替代已有的那個:

為innodb表增加索引的時候也可以嘗試一種比較駭客的方法(官方並不支援,注意備份資料):

Schema與資料型別優化

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

Schema與資料型別優化

選擇優化的資料型別 1.更小的通常更好 一般情況下,應該盡量使用可以正確儲存資料的最小資料型別。因為它們占用更少的磁碟。記憶體和cpu快取,並且處理時需要的cpu週期也更少 2.簡單就好 簡單資料型別的操作通常需要更少的cpu週期 3.盡量避免null 通常情況下最好指定列為not null。通常把...

Schema與資料型別優化

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