oracle查分割槽表的一些注意事項

2022-02-24 06:36:39 字數 1244 閱讀 1388

昨天有個同事找我看了一段sql,說是很慢,我首先看了看執行計畫,發現cost很大,但是同時我也發現分割槽讀取的有很大的問題。表示這樣的:

create table test1

( day_id number

)partition by range(day_id)

( partition part_0 values less than(20130228),

partition part_1 values less than(20130301),

partition part_2 values less than(20130302),

partition part_3 values less than(20130303),

partition part_4 values less than(20130304),

partition part_5 values less than(20130305),

partition part_6 values less than(20130306)

)

表中的資料如下:

查詢是這樣子的:

select * from test1 where substr(day_id,1,6) = 201302
執行計畫是這樣的:

可以看出來,一口氣把所有的分割槽都讀上了,但是按照我的想法,應該是只讀取part_0和part_1這兩個分割槽。後來我把這個sql改成了這樣:

select * from test1 where day_id between 20130227 and 20130228
這個時候的執行計畫就是這樣的:

這樣就好了,只讀取了需要的分割槽,這樣子查詢效率也有了很大的提高。生產系統中一天會有3gb的資料,所以如果按照第乙個sql寫,那麼就會讀到這個表所有的分割槽,資料量就非常可觀了,如果只讀取自己需要的乙個月的分割槽,就要小多了,cost也降低了很多。

我記得以前寫過乙個不能用到索引的情況:昨天遇到這個情況以後發現分割槽也有這樣那樣的限制,還是原來寫的那句話,一定要慎之又慎的寫sql。

Oracle分割槽表的一些簡單技巧

select from user tab partitions where table name x可查對應表的具體分割槽情況 不刪分割槽僅清空分割槽資料推薦使用 alter table table name truncate partition name不建議使用 delete from tabl...

分割槽表的一些操作

一 建立表空間 create tablespace dinya space01 datafile f user data1.dbf size 50m autoextend on next 50m maxsize 20480m extent management local create tables...

對分割槽表的一些總結

分割槽表分為 範圍分割槽 partition by range 列表分割槽 partition by list hash分割槽 partition by hash 有多少個分割槽就有多少個segment 其實hash分割槽最大的好處在於,將資料根據一定的hash演算法,均勻分布到不同的分割槽中去,避...