mysql的分庫(kù)分表一般用于單庫(kù)整體數(shù)據(jù)量太大,或者單表的數(shù)據(jù)量太大了,這種情況會(huì)進(jìn)行分庫(kù)分表由驹,回想一下自己做過(guò)的項(xiàng)目草讶,也就少有的幾個(gè)用到了分庫(kù)分表逝嚎。最近學(xué)到一個(gè)觀點(diǎn)扁瓢,就是做技術(shù)學(xué)習(xí)的時(shí)候多問(wèn)幾個(gè)為什么,那么就從為什么要做分庫(kù)分表說(shuō)起补君。
為什么要做分庫(kù)分表
先說(shuō)分表吧引几,正常索引加得好,一個(gè)表千萬(wàn)級(jí)別的數(shù)據(jù)是沒(méi)問(wèn)題的挽铁,主索引三層索引1170 * 1170 *16 = 21902400她紫,可以存2千萬(wàn)條數(shù)據(jù)。
之前也有見(jiàn)過(guò)數(shù)億條數(shù)據(jù)的大表屿储,走索引查詢也很快,不過(guò)后面還是推了分庫(kù)分表渐逃,畢竟還是穩(wěn)妥起見(jiàn)够掠。
對(duì)于數(shù)據(jù)量比較大的表,除了數(shù)據(jù)條數(shù)較多茄菊,會(huì)導(dǎo)致索引樹(shù)更高疯潭,需要更多次磁盤IO外,還有就是單條數(shù)據(jù)的問(wèn)題面殖,單條數(shù)據(jù)過(guò)大竖哩,磁盤按頁(yè)存儲(chǔ),每頁(yè)存儲(chǔ)的數(shù)據(jù)量更少脊僚,進(jìn)行范圍查詢時(shí)相叁,產(chǎn)生跨頁(yè)的可能性也更大,同時(shí)辽幌,mysql緩存中緩存的數(shù)據(jù)條數(shù)也更少增淹,導(dǎo)致miss的可能性更大。
上面是說(shuō)到表比較大的情況乌企,再看下庫(kù)數(shù)據(jù)比較大的情況虑润,現(xiàn)在普通的mysql數(shù)據(jù)庫(kù)都是主從結(jié)構(gòu)的,所以從負(fù)載加酵、連接數(shù)上來(lái)說(shuō)也好拳喻,但是寫流量只能到主庫(kù)上,不進(jìn)行分庫(kù)的話也會(huì)影響寫入的效率猪腕,并且單庫(kù)數(shù)據(jù)量太大了冗澈,只能在單臺(tái)機(jī)器上進(jìn)行磁盤、cpu的升級(jí)陋葡,不能水平擴(kuò)展渗柿。