国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL 建表的優化策略 小結

MySQL 建表的優化策略 小結

2019-11-01 14:39mysql教程網 Mysql

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,且數據量基本沒有變化。此時增加索引無助于查詢性能,卻會極大的影響更新性能。

當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當對修改性能的要求遠遠大于檢索性能時,不應該創建索引。

4.3. 聯合索引

在特定查詢里,聯合索引的效果高于多個單一索引,因為當有多個索引可以使用時,MySQL只能使用其中一個。

在查詢里,同時用到了聯合索引包含的前幾個列名,都會使用到聯合索引,否則將部分或不會用到。比如我們有一個firstname、 lastname、age列上的多列索引,我們稱這個索引為fname_lname_age。當搜索條件是以下各種列的組合時,MySQL將使用 fname_lname_age索引:

firstname,lastname,age

firstname,lastname

firstname

從另一方面理解,它相當于我們創建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)這些列組合上的索引。

4.4. 索引長度

對于CHAR或者Varchar的列,索引可以根據數據的分布情況,用列的一部分參與創建索引。

create index idx_t_main on t_main(name(3));

這里就是指定name的前三個字符參與索引,而不是全部

最大允許的長度為1000個字節,對已GBK編碼則是500個漢字

5. 特殊字段

5.1. 冗余字段

就是用空間換取時間。如果大表查詢里經常要join某個基礎表,且這個數據基本不變,比如人的姓名,城市的名字等。一旦基礎表發生變動,則需要更新所有涉及到的冗余表。

5.2. 分割字段

如果經常出現以某個字段的某個局部進行檢索和匯總(substring()),可以考慮將這一部分獨立出來。

比如統計姓名里,每種姓氏的人數,可以考慮實現就按照姓和名分別保存,而不是一個字段。

還有就是某些上下級結構的實現,也可以考慮將不同的級別放在不同的字段里。

5.3. BLOB和CLOB

此類字段一般數據量很大,建議設計上數據庫可以只保存其外部連接,而數據以其它方式保存,比如系統文件。

6. 特殊

6.1. 表格分割

如果一個表有許多的列,但平時參與查詢和匯總的列卻并不是很多,此時可以考慮將表格拆分成2個表,一個是常用的字段,另一個是很少用到的字段。

6.2. 使用非事務表類型

MySQL支持多種表類型,其中InnoDB類型是支持事物的,而MyISAM類型是不支持的,但MyISAM速度更快。對于某些數據,比如地理行政劃分,民族等不可能參與事務的數據,可以考慮用MyISAM類型的表格。

但InnoDB的表,將無法用MyISAM表數據做外鍵約束了。

MyISAM表參與的事務,其InnoDB表可以正常的提交和回滾,但不影響MyISAM表。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 夜夜操导航 | 久久一区二区视频 | 欧美 日韩 综合 | 激情久久网 | 成人爱情偷拍视频在线观看 | 精品国产91乱码一区二区三区 | 人人射人人舔 | 综合色久 | jav久久亚洲欧美精品 | 夜夜嗨aⅴ免费视频 | 91久久国产综合久久91精品网站 | 久久国产欧美日韩精品 | 亚洲在线电影 | 国产成人av在线 | 久久日韩 | 91亚洲国产精品 | www.在线播放| 新久久久久久 | 国产午夜精品美女视频明星a级 | 综合久久综合久久 | 国产传媒自拍 | 激情五月婷婷av | 国产在线精品一区 | a级片在线观看 | 免费观看a级毛片在线播放 成人片免费看 | 午夜桃色 | 中文字幕精品一区久久久久 | 国产午夜精品久久久久久久 | 91视频国产精品 | 在线成人小视频 | 一级片在线观看网站 | 亚洲精品午夜 | 国产在线91 | 国产亚洲片 | 亚洲精品国产9999久久久久 | 人和拘一级毛片 | 成人在线高清 | 一区二区三区高清 | 久久艹天天艹 | 亚洲欧美aa | 欧美精品免费在线 |