在日常的開發工作中,除了JAVA相關的技術,打交道最多的就是MySQL數據庫,當數據積累到一定程度,比如500W時就會難免出現一些慢sql,對數據庫的優化方式有很多,比如通過增加合理的索引,今天我們來說下其中的垂直分表。
垂直分表:顧名思義就是將一張表縱向拆分成多張表,通過拆分后每行的字段數減少了,空間占用變小,當檢索表數據時,一次IO就能從磁盤獲取更多的數據到內存中,減少了IO次數,降低了響應時間。
拆分的一些原則:
- 可以根據業務進行拆分,比如原表中有些是一些輔助信息字段,此時可以把輔助信息拆分到另一張表中,并增加與數據的關聯,比如增加元數據的主鍵等。
- 將核心字段或者經常訪問的字段放到一張表中,讓表更加原子,清晰,但是以合理為基礎,也可以冗余字段,也不要過度拆分。
舉個例子:將我們的訂單表拆分成訂單表和訂單擴展信息表,如下
order表
t_order_contact表
訂單中的聯系人信息是訂單的擴展信息,而且不常訪問,拆分后原訂單表輕量了,更加原子化,效率也提升了。當我們需要同時獲取訂單與訂單擴展信息時,不建議join方式,應分別查詢然后通過程序去處理。