MySQL 建表的優化策略

2021-05-04 16:33:48 字數 1767 閱讀 9419

mysql 建表的優化策略

目錄1. 字符集的選擇 1

2. 主鍵 1

3. 外來鍵 2

4. 索引 2

4.1. 以下情況適合於建立索引 2

4.2. 以下的情況下不適合建立索引 3

4.3. 聯合索引 3

4.4. 索引長度 4

5. 特殊字段 4

5.1. 冗餘字段 4

5.2. 分割字段 4

5.3. blob和clob 5

6. 特殊 5

6.1. **分割 5

6.2. 使用非事務表型別 5

1. 字符集的選擇

如果確認全部是中文,不會使用多語言以及中文無法表示的字元,那麼gbk是首選。

採用utf-8編碼會占用3個位元組,而gbk只需要2個位元組。

2. 主鍵

盡可能使用長度短的主鍵

系統的自增型別auto_incremen, 而不是使用類似uuid()等型別。如果可以使用外來鍵做主鍵,則更好。比如1:1的關係,使用主表的id作為從表的主鍵。

主鍵的字段長度需要根據需要指定。

tinyint 從 2的7次方-1 :-128 到 127

smallint 從 2的15次方-1 :-32768 到 32767

mediumint 表示為 2的23次方-1: 從 -8388608 到8388607

int 表示為 2的31次方-1

bigint 表示為 2的63次方-1

在主鍵上無需建單獨的索引,因為系統內部為主鍵建立了聚簇索引。

允許在其它索引上包含主鍵列。

3. 外來鍵

? 外來鍵會影響插入和更新效能,對於批量可靠資料的插入,建議先遮蔽外來鍵檢查。

? 對於資料量大的表,建議去掉外來鍵,改由應用程式進行資料完整性檢查。

? 盡可能用選用對應主表的主鍵作作為外來鍵,避免選擇長度很大的主表唯一鍵作為外來鍵。

? 外來鍵是預設加上索引的

4. 索引

建立索引,要在適當的表,適當的列建立適當數量的適當索引。在查詢優先和更新優先之間做平衡。

4.1. 以下情況適合於建立索引

? 在經常需要搜尋的列上,可以加快搜尋的速度

? 在作為主鍵的列上,強制該列的唯一性和組織表中資料的排列結構

? 在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度

? 在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的

? 在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間

? 在經常使用在where子句中的列上面建立索引,加快條件的判斷速度。

4.2. 以下的情況下不適合建立索引

? 對於那些在查詢中很少使用或者參考的列不應該建立索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。

? 對於那些只有很少資料值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,即需要在表中搜尋的資料行的比例很大。增加索引,並不能明顯加快檢索速度。

? 對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。

當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。

? 如果表資料很少,比如每個省按市做彙總的表,一般低於2000,且資料量基本沒有變化。此時增加索引無助於查詢效能,卻會極大的影響更新效能。

MySQL 建表的優化策略 小結

目錄 1.字符集的選擇 1 2.主鍵 1 3.外來鍵 2 4.索引 2 4.1.以下情況適合於建立索引 2 4.2.以下的情況下不適合建立索引 3 4.3.聯合索引 3 4.4.索引長度 4 5.特殊字段 4 5.1.冗餘字段 4 5.2.分割字段 4 5.3.blob和clob 5 6.特殊 5 ...

mysql建表效能優化 MYSQL建表優化

除非單錶資料未來會一直不斷 否則不要一開始就考慮拆分,拆分會帶來邏輯 部署 運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。1 字段 a 盡量使用tinyint smallint medium int作為整數型別而非int,如果非負則加上unsigned...

mysql建表原則 mysql優化1 建表原則

建表三大原則 定長和變長分離 常用字段和不常用字段分離 使用冗餘欄位或冗餘表 1 定長與變長分離 如 id int,佔4個位元組,char 4 佔4個字元長度,也是定長,time 即每乙個單元值佔的位元組是固定的。在磁碟上查詢時,由於每一行長度固定,比如長度為10000,查下一條時只需查 10001...