我有一个如下的Oracle表:
CREATE TABLE "TABLE1"
(
"TABLE_ID" VARCHAR2(32 BYTE),
"TABLE_DATE" DATE,
"TABLE_NAME" VARCHAR2(2 BYTE)
)
PARTITION BY RANGE ("TABLE_DATE")
猜测该表的数据已按TABLE_DATE列进行分区。
如何使用此分区列在WHERE子句中从此表中更快地获取数据,如...
SELECT * FROM TABLE1 PARTITION (P1) p
WHERE p.TABLE_DATE > (SYSDATE - 90) ;
答案 0 :(得分:0)
您应该更改分区以匹配查询,而不是更改查询以匹配分区。在大多数情况下,我们不必指定要读取的分区。 Oracle可以自动确定如何在运行时修剪分区。
例如,使用此表:
var comResClass = complileResults()
class TestView: UIViewController, XMLParserDelegate {
override func viewDidLoad() {
super.viewDidLoad()
comResClass.setConTypeResult(val: "WiFi")
let ct = comResClass.getConTypeResult()
print("CT ", ct)
}
}
几乎不需要在查询中直接引用分区。这是额外的工作,如果我们列出了错误的分区名称,查询将无法正常工作。
我们可以看到使用create table table1
(
table_id varchar2(32 byte),
table_date date,
table_name varchar2(2 byte)
)
partition by range (table_date)
(
partition p1 values less than (date '2019-05-06'),
partition p2 values less than (maxvalue)
);
进行分区修剪,如下所示:
EXPLAIN PLAN
在结果中,我们可以在explain plan for
SELECT * FROM TABLE1 p
WHERE p.TABLE_DATE > (SYSDATE - 90) ;
select *
from table(dbms_xplan.display);
和Pstart
列中看到分区。 Pstop
意味着将在运行时确定分区。在这种情况下,开始分区基于KEY
的值。
SYSDATE