1. 程式人生 > >MySQL資料分割槽儲存

MySQL資料分割槽儲存

MySQL是一種傳統的關係型資料庫,其體積小、速度快、成本低,但是對於大資料量(百萬級以上)的操作顯得有些力不從心。

最近小編使用的MySQL資料庫就面臨了大資料量操作的問題,當資料量達到百萬級之後,查詢速度明顯下降,此時就需要優化提升查詢速度了。

data表分割槽儲存

原理解釋

分割槽是把存放資料的檔案分成許多小塊,儲存在磁碟中不同的區域,通過提升磁碟I/O能力來提升查詢速度。分割槽不會更改資料庫表的結構,發生變化的是儲存方式。

實現方式

採用range分割槽,選擇合適的資料表字段實現分割槽儲存。用小編的資料表作為例子,選擇年份為基準,不同的區域儲存的是不同年份的資料,可以採用合併語句進行分割槽的合併,分割槽操作由MySQL暗箱完成,從使用者的角度看,資料庫表不會改變,程式的程式碼也不需要更改。

優缺點

優點:range分割槽實現方便,沒有破壞原本資料庫表的結構,使用者也不需要更改dao層程式碼和查詢方式。而且可以提前預設分割槽,比如今年是2018年,使用者可以將資料分割槽預設到2020年,方式靈活,便於擴充。

缺點:資料儲存依賴於分割槽的儲存磁碟,一旦磁碟損壞,則會造成資料的丟失。

 

相關操作

選擇需要建立分割槽的資料表字段,對其建立BTREE索引

分割槽之前將分割槽欄位改為datetime/date型別,才能進行分割槽操作(注:char型別不支援分割槽操作)。

建立分割槽

採用range分割槽以保證分割槽均勻

ALTER TABLE `gt_stk_index`
partition by range(YEAR(create_time))
(
 PARTITION p2007 VALUES LESS THAN (2008),
 PARTITION p2008 VALUES LESS THAN (2009),
 PARTITION p2009 VALUES LESS THAN (2010),
 PARTITION p2010 VALUES LESS THAN (2011),
 PARTITION p2011 VALUES LESS THAN (2012),
 PARTITION p2012 VALUES LESS THAN (2013),
 PARTITION p2013 VALUES LESS THAN (2014),
 PARTITION p2014 VALUES LESS THAN (2015),
 PARTITION p2015 VALUES LESS THAN (2016),
 PARTITION p2016 VALUES LESS THAN (2017),
 PARTITION p2017 VALUES LESS THAN (2018),
 PARTITION p2018 VALUES LESS THAN (2019),
 PARTITION p2019 VALUES LESS THAN (2020),
 PARTITION p2020 VALUES LESS THAN (2021),
 PARTITION p2021 VALUES LESS THAN (2022),
 PARTITION p2022 VALUES LESS THAN (2023),
 PARTITION p2023 VALUES LESS THAN (2024),
 PARTITION p2024 VALUES LESS THAN (2025)
)

檢視分割槽

SELECT
	*
FROM
	INFORMATION_SCHEMA. PARTITIONS
WHERE
	TABLE_NAME = 'gt_stk_index';

查詢結果

分割槽優化後,查詢速度提升主要體現在非跨區查詢的時候,當查詢條件均屬於一個區域時,資料庫可以快速定位到所查分割槽,而不會掃描全表。

每次插入資料的時候,資料庫會判定對應的create_time屬於哪個分割槽,從而儲存到對應的分割槽中,不會影響其它分割槽。