有關分割槽表的另一點

2022-02-24 07:13:00 字數 1276 閱讀 3741

很久以前寫了乙個關於分割槽表的博文(後來在實際的工作中發現,我們的儲存過程中存在很多這樣子的寫法:

create or replace procedure p_test_par(v_day in varchar2) as

v_sql varchar2(1000);

begin

v_sql := 'insert into test_par

select * from test_par t where t.day_id =' || v_day;

execute immediate v_sql;

commit;

end

這裡面的v_day是儲存過程中傳入的變數。

這個分割槽表是按照day_id欄位範圍分割槽的,分割槽的字段是varchar2型的。這個v_sql列印出來是這樣子的:

insert into test_par

select * from test_par t where t.day_id =20130101

主要看底下的select語句。

看,只選擇了20130101一天的資料,但是讀取分割槽的時候卻將所有的分割槽都讀取上了,這顯然沒有達到我們的要求,問題很簡答,就在於下面的隱式型別轉換中。如果語句換成下面這個就不一樣了:

這樣子就好了,cost也降下來了。以前寫過乙個索引不可用的(沒想到相同的時候也發生在了分割槽上。

過程這樣改:

create or replace procedure p_test_par(v_day in varchar2) as

v_sql varchar2(1000);

begin

v_sql := 'insert into test_par

select * from test_par t where t.day_id =''' || v_day ||'''';

execute immediate v_sql;

commit;

end;

後來我又發現乙個問題,如果分割槽條件是number型,但是在sql語句中條件裡寫了單引號,還是可以選擇到恰當的分割槽。現在在上班,有時間了在截圖。

hive 分割槽表 Hive的DDL分割槽表建立

1.單分割槽表 建立表t user,指定分割槽hive xiaoliu create table t user id int,name string partitioned by country string row format delimited fields terminated by xia...

mysql分割槽表 MySQL分割槽表的正確使用方法

mysql分割槽表概述 我們經常遇到一張表裡面儲存了上億甚至過十億的記錄,這些表裡面儲存了大量的歷史記錄。對於這些歷史資料的清理是乙個非常頭疼事情,由於所有的資料都乙個普通的表裡。所以只能是啟用乙個或多個帶where條件的delete語句去刪除 一般where條件是時間 這對資料庫的造成了很大壓力。...

oracle 的分割槽表

今早一來,同事說分割槽表無法分割槽了 先手動分割槽,alter table add partition 分割槽名稱 values less than to date 時間 yyyy mm dd 我們使用的是範圍分割槽表 查後發現分割槽表中有幾個分割槽與我們自己定義的分割槽命名規則有些不同,這樣可能造...