我的天啦,一個(gè)表九千萬(wàn)也是了不得了!
我上家公司明確規(guī)定,一張表不能超過(guò)5000萬(wàn),因?yàn)椴樵冃蕰?huì)有更大的降低!
無(wú)論如何,看下如何優(yōu)化數(shù)據(jù)查詢吧!
①,單庫(kù)單表:
1,加索引,一個(gè)好的索引能用空間換取查詢時(shí)間的大為降低!
2,使用存儲(chǔ)過(guò)程:減少sql編譯的時(shí)間!
3,優(yōu)化sql:包括聯(lián)合查詢的指向,where,order語(yǔ)句使用索引字段,減少使用多表聯(lián)合查詢,不要使用select *等等!
4,參數(shù)配置:擴(kuò)大內(nèi)存,調(diào)節(jié)線程池參數(shù)等等!
5,開(kāi)啟緩存:開(kāi)啟二級(jí)緩存,三級(jí)緩存,提升查詢效率!
②,單庫(kù)多表:
使用水平拆分(比如按月份),將表分為12張表,然后在代碼端按照月份訪問(wèn)相應(yīng)月份的表!
使用垂直拆分:很多字段只是作為保存記錄用,(像一些約定,備注啥的字段往往很大),可以將查詢中常常用到的字段放在常用的一張表中做查詢,另一些字段放另一張表中存儲(chǔ),通過(guò)某個(gè)唯一索引字段聯(lián)系起來(lái),可以保證查詢效率大為提升(因?yàn)榇疟P(pán)IO減少)!
③,多庫(kù)多表:
①,主從讀寫(xiě)分離:表中數(shù)據(jù)雖然還是一致,但是由于多個(gè)從庫(kù)讀,主庫(kù)寫(xiě)數(shù)據(jù),大大減少共享鎖的性能開(kāi)銷!
②,分庫(kù)分表:指定一個(gè)字段作為,分庫(kù)字段,利用hash值或者其它策略,分布在不同的庫(kù)里面,在按照相應(yīng)分布策略(比如上面的水平拆分或者垂直拆分),分散到不同的表里!
比如我們現(xiàn)在的數(shù)據(jù)庫(kù)設(shè)計(jì)為8庫(kù)1024表,你的將近一億的數(shù)據(jù)在我們的單張表里面只有不到10W!
雖然理論上,一張表的大小不做任何限制,但是基于查詢效率,索引性能等,不宜超出5000萬(wàn)數(shù)據(jù)!
關(guān)于多線程,分布式,微服務(wù),數(shù)據(jù)庫(kù),緩存的更多干貨,會(huì)繼續(xù)分享,敬請(qǐng)關(guān)注。。