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