MySQL分割槽表效率測試對比1

2021-08-01 13:54:43 字數 3296 閱讀 6024



目錄(?)

[-]

建立表不分割槽的表

分割槽表插入資料

插入未分割槽表

插入分割槽表

測試效率

測試sql

測試結果總結

這一段時間對資料庫優化方面的認識深有體會,就以mysql為例測試一下分割槽表的效能

mysql5.0好像不支援分割槽,我用的5.5版本,測試是否支援可通過以下方法:

show variables like

'%partition%';

如果結果為yes則說明支援,如下圖:

create

table no_part_tab

(id int

default

null,

remark varchar(50) default

null,

d_date date

default

null

)engine=myisam

create

table part_tab

(id int

default

null,

remark varchar(50) default

null,

d_date date

default

null

)engine=myisam

partition by range(year(d_date))(

partition p0 values less than(1995),

partition p1 values less than(1996),

partition p2 values less than(1997),

partition p3 values less than(1998),

partition p4 values less than(1999),

partition p5 values less than(2000),

partition p6 values less than(2001),

partition p7 values less than(2002),

partition p8 values less than(2003),

partition p9 values less than(2004),

partition p10 values less than maxvalue);

mysql沒有像oracle那樣的序列,所以要用迴圈插入,每張表插入800w資料做測試

drop procedure

ifexists

no_load_part;

delimiter//

create

procedure

no_load_part

()begin

declare

iint;

set i =1;

while i<8000001

do insert into no_part_tab values(i,'no',adddate('1995-01-01',(rand(i)*36520) mod

3652));

set i=i+1;

endwhile;

end//

delimiter ;

call no_load_part;

drop procedure

ifexists

load_part;

delimiter&&

create

procedure

load_part

()begin

declare

iint;

set i=1;

while i<8000001

do insert into part_tab values(i,'partition',adddate('1995-01-01',(rand(i)*36520) mod

3652));

set i=i+1;

endwhile;

end&&

delimiter ;

call load_part;

說明:首先刪除procedure,如果已存在的話,然後開始建立新的,delimiter是指定分隔符,預設的是「;」,這裡我們不能用分號,就指定為「//」或者「&&」,建立時定義個int型別i,然後通過do…while迴圈,等程式執行完畢後把分隔符重新指定為「;」,然後通過call語句寫入資料庫

第一次查詢的結果對比。不分割槽是10.90秒,分割槽是0.28秒,可以看出分割槽效率提高了約97%,第一次查詢速度慢,當多查詢幾次效率一般會提高,我也試了試,下面是結果:

如圖可以看出,多查詢幾次後,不分割槽的表穩定在2.17秒左右,分割槽表一直在0.28秒左右,分割槽的效率依然相比提高約87%,分割槽效果相當顯著

測試資料庫相對簡單,當資料複雜並且外來鍵多時時,mysql處理近千萬的資料的表時效率是不太好的,這是分割槽就會顯得特別的重要

測試過程中需要了解的注意點:

分割槽表測試

use ylbx 1 1 建立檔案組 常用系統表sysfiles sys.database files sys.filegroups alter database ylbx 1 remove filegroup filegroup 2018 01 alter database ylbx 1 add ...

MySQL分割槽表

分割槽表是一種粗粒度,簡易的索引策略,適用於大資料的過濾場景.最適合的場景是,沒有合適的索引時,對其中幾個分割槽表進行全表掃瞄.或者只有乙個分割槽表和索引是熱點,而且這個分割槽和索引能夠全部儲存在記憶體中.限制單錶分割槽數不要超過150個,並且注意某些導致無法做分割槽過濾的細節,分割槽表對於單條記錄...

mysql分割槽表

對使用者來說,分割槽表是乙個獨立的邏輯表,但是底層由多個物理子表組成。實現分割槽的 實際上是對一組底層表的控制代碼物件的封裝。mysql在建立表時使用partition by子句定義每個分割槽存放的資料。在執行查詢的時候,優化器會根據分割槽定義過濾那些沒有我們需要資料的分割槽,這樣查詢就無須掃瞄所有...