我找到了关于Oracle中不同权限的this教程。 我想知道,如果有人能解释这三个创建索引语句之间的差异:
CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL;
和
CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL
(PARTITION invoices_q1 TABLESPACE users,
PARTITION invoices_q2 TABLESPACE users,
PARTITION invoices_q3 TABLESPACE users,
PARTITION invoices_q4 TABLESPACE users);
和
CREATE TABLE invoices
(invoice_no NUMBER NOT NULL,
invoice_date DATE NOT NULL,
comments VARCHAR2(500))
PARTITION BY RANGE (invoice_date)
(PARTITION invoices_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q3 VALUES LESS THAN (TO_DATE('01/09/2001', 'DD/MM/YYYY')) TABLESPACE users,
PARTITION invoices_q4 VALUES LESS THAN (TO_DATE('01/01/2002', 'DD/MM/YYYY')) TABLESPACE users);
我原以为,每个分区都创建相同类型的本地索引。
//编辑: 另一个问题。 我们假设我有下表
CREATE INDEX invoices_idx ON invoices (invoice_date);
我创建了一个索引:
extension Date
{
var nextDateWeak : Date {
return Calendar.current.date(byAdding: .day, value: 6 , to: self )!
}
}
如果我同时查询索引,那将是什么类型的索引以及我需要什么类型的索引invoice_no only?
感谢您的澄清。 即
答案 0 :(得分:2)
CREATE INDEX invoices_idx ON invoices (invoice_date);
您正在创建全局索引。文档说,"全局索引可以通过范围或哈希方法进行分区,并且可以在任何类型的分区或非分区的表中定义"。
CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL;
您正在创建本地索引。本地索引是索引分区和表分区之间的一对一映射。
CREATE INDEX invoices_idx ON invoices (invoice_date) LOCAL
(PARTITION invoices_q1 TABLESPACE users,
PARTITION invoices_q2 TABLESPACE users,
PARTITION invoices_q3 TABLESPACE users,
PARTITION invoices_q4 TABLESPACE users);
您正在创建本地分区索引。本地分区索引允许我们将表的各个分区和索引脱机以进行维护(或重组),而不会影响表中的其他分区和索引。
答案 1 :(得分:2)
如果您创建索引LOCAL
,那么每个分区都有其自己的"指数。否则你会有一个"一个大指数"跨越整个表,称为GLOBAL
索引。
甚至还有第三种选择,您也可以对索引进行分区。 LOCAL
表示索引分区与基表相同。但是,可以将索引分区不同于表格 - 但我不得不承认,我不知道任何有用的用例。
通常LOCAL
索引更好,因为
但当然也有缺点