問:有一張大表,其中按時間字段(TIME_ID)進行表分區(按季度分區),但是如果業務人員做跨季度的大批量數據的查詢時,未能走TIME_ID分區索引,導致全表掃描。此種情況該如何處理?
示例解析:
1、我們根據oracle中sh用戶自帶的SALES表創建一個新的分區表(TIME_ID上建季度分區;插入一個新的字段CREATE_ID,上面不建分區),步驟如下:
create table SALES_1998_part
(
PROD_ID NUMBER not null,
CUST_ID NUMBER not null,
TIME_ID DATE not null,
CREATE_ID DATE not null
)
partition by range (TIME_ID)
(
partition SALES_Q1_1998 values less than (TO_DATE(' 1998-04-01', 'SYYYY-MM-DD'))
tablespace EXAMPLE
pctfree 0
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition SALES_Q2_1998 values less than (TO_DATE(' 1998-07-01', 'SYYYY-MM-DD'))
tablespace EXAMPLE
pctfree 0
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition SALES_Q3_1998 values less than (TO_DATE(' 1998-10-01', 'SYYYY-MM-DD'))
tablespace EXAMPLE
pctfree 0
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition SALES_Q4_1998 values less than (TO_DATE(' 1999-01-01', 'SYYYY-MM-DD'))
tablespace EXAMPLE
pctfree 0
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
)
);
2、向sales_1998_part表中插入值,CREATE_ID的值來處於sales表的TIME_ID值。
insert into sales_1998_part(PROD_ID,CUST_ID,TIME_ID,CREATE_ID)
select PROD_ID,CUST_ID,TIME_ID,TIME_ID from sales
where time_id >= TO_DATE(' 1998-01-01', 'SYYYY-MM-DD')
and time_id < TO_DATE(' 1999-01-01', 'SYYYY-MM-DD');
commit;
select count(*) from sales_1998_part;
3、查詢,查看執行計划
1) 使用分區鍵檢索(使用分區鍵進行索引,會自動在數據存在的區進行檢索。因為開始區為2,結束區為3。)
select * from sales_1998_part where TIME_ID >= TO_DATE(' 1998-04-01', 'SYYYY-MM-DD')
and TIME_ID <= TO_DATE(' 1998-10-01', 'SYYYY-MM-DD');
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Pstart| Pstop |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 83425 | | |
| 1 | PARTITION RANGE ITERATOR| | 83425 | 2 | 3 |
|* 2 | TABLE ACCESS FULL | SALES_1998_PART | 83425 | 2 | 3 |
----------------------------------------------------------------------------
2) 不使用分區鍵檢索(沒有使用分區鍵進行檢索,那么則會查詢全部的表分區。因為要查詢的數據就在2和3分區上,其它的分區數據也被讀取了,增大了數據庫壓力,效率低下。)
select * from sales_1998_part where CREATE_ID >= TO_DATE(' 1998-04-01', 'SYYYY-MM-DD')
and CREATE_ID <= TO_DATE(' 1998-10-01', 'SYYYY-MM-DD');
-----------------------------------------------------------------------
| Id | Operation | Name | Rows | Pstart| Pstop |
-----------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 86662 | | |
| 1 | PARTITION RANGE ALL| | 86662 | 1 | 4 |
|* 2 | TABLE ACCESS FULL | SALES_1998_PART | 86662 | 1 | 4 |
-----------------------------------------------------------------------
oracle分區表的使用和查詢
本文參考了 https://blog.csdn.net/mzglzzc/article/details/46300645 一 創建和使用分區表 1.范圍分區(RANGE)范圍分區將數據基於范圍映射到 ...
oracle使用dblink跨庫查詢的例子
本文介紹了oracle數據庫使用dblink進行跨庫查詢的方法,oracle dblink跨庫查詢教程,需要的朋友參考下. oracle dblink跨庫查詢 方法一:首先,創建數據庫鏈接: 復制 ...
oracle 開發筆記“跨數據庫查詢復制”
1.方法一:創建DBL(data base link) CREATE PUBLIC DATABASE LINK 數據鏈名稱 CONNECT TO 登陸用戶名 IDENTIFIED BY 密碼 USIN ...
Oracle如何實現跨庫查詢
實現結果:在一個數據庫中某個用戶下編寫一個存儲過程,在存儲過程中使用DBLINK連接另一個數據庫,從此數據庫中的一個用戶下取數,然后插入當前的數據庫中的一個表中. 二. 實現方法步驟: 1. 創建存儲 ...
Oracle如何實現跨數據庫查詢
轉發:http://www.linuxidc.com/Linux/2012-02/53974.htm 實現結果:在一個數據庫中某個用戶下編寫一個存儲過程,在存儲過程中使用DBLINK連接另一個數據庫, ...
oracle表空間表分區詳解及oracle表分區查詢使用方法(轉+整理)
歡迎和大家交流技術相關問題: 郵箱: jiangxinnju@163.com 博客園地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
oracle表分區的,分區操作,分區查詢,子分區查詢
一.摘要 有關表分區的一些維護性操作: 注:分區根據具體情況選擇. 表分區有以下優點: 1.數據查詢:數據被存儲到多個文件上,減少了I/O負載,查詢速度提高. 2.數據修剪:保存歷史數據非常的理想. ...
ORACLE 分區表簡介
參考鏈接:http://blog.csdn.net/ziwen00/article/details/9158725ORACLE-分區表 此文從以下幾個方面來整理關於分區表的概念及操作: 1.表空間及分 ...
oracle分區表(整理)
Oracle 表分區 早在8.0.5版本中,Oracle就將范圍分區技術引入,現在分區功能已經越來越強大,包括支持擴展分區功能.Interval分區.外鍵分區.模擬列分區.以及分區建議器等.那么,分區 ...
隨機推薦
SQL2043N 與 linux的randomize_va_space特性
自從數據庫服務器從redhat4.6升級到redhat5.5之后,在使用TSM備份的時候偶爾會出現SQL2043N 查看錯誤: [db2inst1@limt ~]$ db2 ? SQL2043N S ...
Vi問題
,ubuntu11.10下vi編輯器按i,左下方沒有出現“輸入模式”或者“insert”.在桌面環境下,用ctrl+alt+t調出命令行打開是這樣,在第一控制台ctrl+alt+F1下打開,也是這樣, ...
J2EE中你必須了解的13種技術規范
1)JDBC(Java Database Connectivity): JDBC API為訪問不同的數據庫提供了一種統一的途徑,象ODBC一樣,JDBC對開發者屏蔽了一些細節問題,另外,JDCB對數據 ...
shell腳本監控目錄下文件被篡改時報警
思路: 目錄下文件被篡改的幾種可能: 1.被修改 2.被刪除 3.新增文件 md5命令詳解 參數: -b 以二進制模式讀入文件內容 -t 以文本模式讀入文件內容 -c 根據已生成的md5值,對現存文件 ...
webpack dev server 配置 啟動項目報錯Error: listen EADDRINUSE
Error: listen EADDRINUSE 0.0.0.0:5601 它的意思是,端口5601被其他進程占用. 切換端口即可解決問題
使用CSS定位元素實現水平垂直居中效果
總結一下平時使用CSS技巧使元素達到水平居中效果 相對定位(或絕對定位)實現水平垂直居中: element{ position:relative; /*這個屬性也可以是absolute*/ width ...
sublime同步文件與siderbar
有時候,打開了sider bar,想和Eclipse.idea一樣,每打開一個tab,就可以在左側的sider bar 目錄上面看到我當前的位置,於是找到了一個插件. SyncedSideBar 安裝 ...
Trailing Zeroes (II) LightOJ - 1090(預處理+前綴和)
求C(n,r)*p^q的后綴零 考慮一下 是不是就是求 10^k*m 的k的最大值 而10又是由2 和 5 組成 所以即是求 2^k1 * 5^k2 * m1 中k1和k2小的那一個數 短板效應嘛 ...
實戰MEF(1)一種不錯的擴展方式
在過去,我們完成一套應用程序后,如果后面對其功能進行了擴展或修整,往往需要重新編譯代碼生成新的應用程序,然后再覆蓋原來的程序.這樣的擴展方式對於較小的或者不經常擴展和更新的應用程序來說是可以接受的,而 ...
[Done][DUBBO] dubbo Thread pool is EXHAUSTED!
異常信息: com.alibaba.dubbo.remoting.ExecutionException: class com.alibaba.dubbo.remoting.transport.disp ...