資料庫表分割槽真能加速資料庫查詢速度嗎?

2021-07-24 15:24:19 字數 749 閱讀 1736

資料庫表分割槽真能加速資料庫查詢速度嗎?

對於這個問題我們來進行分析:

對於olap的應用,分割槽的確可以很好地提高查詢的效能,因為olap應用大多數查詢需要頻繁地掃瞄一張很大的表。假設有一張1億行的表,其中有乙個時間戳進行分割槽,則只需要掃瞄相應的分割槽即可。

然而對於oltp的應用,分割槽應該非常小心。在這種應用下,通常不可能會獲取一張大表中10%的資料,大部分都是通過索引返回幾條記錄即可。而根據b+樹索引的原理可知,對於一張大表,一般的b+樹需要2~3次的磁碟io。因此b+樹可以很好地完成操作,不需要分割槽的幫助,並且設計不好的分割槽會帶來嚴重的效能問題。

例如:很多開發團隊會認為含有1000w行的表是一張非常大的表,所以他們往往會採用分割槽,如對主鍵做10個hash的分割槽,這樣每個分割槽就只有100w的資料了,因此查詢應該變快了,如select * from table where pk=@pk。但是有沒有考慮過這樣一種情況:100w和1000w行的資料本身構成的b+樹的層次都是一樣的可能都是2層。那麼上述走主鍵分割槽的索引並不會帶來效能的提高。如果1000w的b+樹高度是3,100w的b+樹的高度是2,那麼上述按主鍵分割槽的索引可以避免1次io,從而提高查詢效率。這沒問題,但是這張表只有主鍵索引,沒有任何其他的列需要查詢的,如果還有類似如下的sql語句:select * from table where key = @key,這時對於key的查詢需要掃瞄所有的10個分割槽,即使每個分割槽的查詢開銷為2次io,則一共需要20次io。而對於原來單錶的設計,對於key的查詢只需要2~3次io。

資料庫表分割槽

create database mytest on sql server 資料庫表分割槽由三個步驟來完成 1.建立分割槽函式 2.建立分割槽架構 3.對錶進行分割槽 1.0建立表分割槽函式 create partition function mypartfunc int as range right...

資料庫表分割槽

實現資料庫表分割槽步驟 1,檢視資料庫檔案儲存位置 select from v datafile 2,在伺服器上資料庫儲存位置上,新建表空間檔案 touch d part1.dbf touch d part2.dbf 第二種方式 在plsql或oracle命令端,建立表空間 3,建立表,並根據型別分...

資料庫表分割槽

create database mytest on sql server 資料庫表分割槽由三個步驟來完成 1.建立分割槽函式 2.建立分割槽架構 3.對錶進行分割槽 1.0建立表分割槽函式 create partition function mypartfunc int as range right...