mysql分區(qū)后每個分區(qū)成了獨立的文件烹俗,雖然從邏輯上還是一張表其實已經(jīng)分成了多張獨立的表唾戚。
從“information_schema.INNODB_SYS_TABLES”系統(tǒng)表可以看到每個分區(qū)都存在獨立的TABLE_ID,由于Innodb數(shù)據(jù)和
索引都是保存在".ibd"文件當(dāng)中(從INNODB_SYS_INDEXES系統(tǒng)表中也可以得到每個索引都是對應(yīng)各自的分區(qū)(primary
key和unique也不例外))棍辕,所以分區(qū)表的索引也是隨著各個分區(qū)單獨存儲统阿。
在**INNODB_SYS_INDEXES**系統(tǒng)表中type代表索引的類型;
** 0:一般的索引,**
1:(**GEN_CLUST_INDEX**)不存在主鍵索引的表,會自動生成一個6個字節(jié)的標(biāo)示值躯肌,
** 2:unique索引,**
** 3:primary索引;**
** 所以當(dāng)我們在分區(qū)表中創(chuàng)建索引時其實也是在每個分區(qū)中創(chuàng)建索引滩援,每個分區(qū)維護(hù)各自的索引(其實也就是local **
index)强品;
**對于一般的索引(非主鍵或者唯一)沒什么問題由于索引樹中只保留了索引key和主鍵key(如果存在主鍵則是主鍵的key否**
則就是系統(tǒng)自動生成的6個的key)不受分區(qū)的影響膘侮;
**但是如果表中存在主鍵就不一樣了,雖然在每個分區(qū)文件中都存在主鍵索引但是主鍵索引需要保證全局的唯一性就是所**
有分區(qū)中的主鍵的值都必須唯一(唯一鍵也是一樣的道理)的榛,所以在創(chuàng)建分區(qū)時如果表中存在主鍵或者唯一鍵那么分區(qū)列必
須包含主鍵或者唯一鍵的部分或者全部列(全部列還好理解琼了,部分列也可以個人猜測是為了各個分區(qū)和主鍵建立關(guān)系),由
于需要保證全局性又要保證插入數(shù)據(jù)更新數(shù)據(jù)到具體的分區(qū)所以就需要將分區(qū)和主鍵建立關(guān)系,由于通過一般的索引進(jìn)行查
找其它非索引字段需要通過主鍵如果主鍵不能保證全局唯一性的話那么就需要去每個分區(qū)查找了夫晌,這樣性能可想而知雕薪。
To enforce the uniqueness we only allow mapping of each unique/primary key value to one partition.If we removed this limitation it would mean that for every insert/update we need to check in every partition to verify that it is unique. Also PK-only lookups would need to look into every partition.
索引方式:
性能依次降低
1.主鍵分區(qū)
主鍵分區(qū)即字段是主鍵同時也是分區(qū)字段,性能最好
2. 部分主鍵+分區(qū)索引
使用組合主鍵里面的部分字段作為分區(qū)字段晓淀,同時將分區(qū)字段建索引
3.分區(qū)索引
沒有主鍵所袁,只有分區(qū)字段且分區(qū)字段建索引
4.分區(qū)+分區(qū)字段沒有索引
只建了分區(qū),但是分區(qū)字段沒有建索引
**分區(qū)系列文章: **
RANGE分區(qū):http://www.cnblogs.com/chenmh/p/5627912.html
LIST分區(qū):http://www.cnblogs.com/chenmh/p/5643174.html
COLUMN分區(qū):http://www.cnblogs.com/chenmh/p/5630834.html
HASH分區(qū):http://www.cnblogs.com/chenmh/p/5644496.html
KEY分區(qū):http://www.cnblogs.com/chenmh/p/5647210.html
子分區(qū):http://www.cnblogs.com/chenmh/p/5649447.html
指定各分區(qū)路徑:http://www.cnblogs.com/chenmh/p/5644713.html
分區(qū)介紹總結(jié):http://www.cnblogs.com/chenmh/p/5623474.html
總結(jié)
因為每一個表都需要有主鍵這樣可以減少很多鎖的問題凶掰,由于上面講過主鍵需要解決全局唯一性并且在插入和更新時可以不需要去掃描全部分區(qū)燥爷,造成主鍵和分區(qū)列必須存在關(guān)系;所以最好的分區(qū)效果是使用主鍵作為分區(qū)字段其次是使用部分主鍵作為分區(qū)字段且創(chuàng)建分區(qū)字段的索引懦窘,其它分區(qū)方式都建議不采取前翎。