很久以前寫了乙個關於分割槽表的博文(後來在實際的工作中發現,我們的儲存過程中存在很多這樣子的寫法:
create or replace procedure p_test_par(v_day in varchar2) as這裡面的v_day是儲存過程中傳入的變數。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
這個分割槽表是按照day_id欄位範圍分割槽的,分割槽的字段是varchar2型的。這個v_sql列印出來是這樣子的:
insert into test_par主要看底下的select語句。select * from test_par t where t.day_id =20130101
看,只選擇了20130101一天的資料,但是讀取分割槽的時候卻將所有的分割槽都讀取上了,這顯然沒有達到我們的要求,問題很簡答,就在於下面的隱式型別轉換中。如果語句換成下面這個就不一樣了:
這樣子就好了,cost也降下來了。以前寫過乙個索引不可用的(沒想到相同的時候也發生在了分割槽上。
過程這樣改:
create or replace procedure p_test_par(v_day in varchar2) as後來我又發現乙個問題,如果分割槽條件是number型,但是在sql語句中條件裡寫了單引號,還是可以選擇到恰當的分割槽。現在在上班,有時間了在截圖。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;
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 我們使用的是範圍分割槽表 查後發現分割槽表中有幾個分割槽與我們自己定義的分割槽命名規則有些不同,這樣可能造...