database - 我们可以根据两列对 oracle 数据库进行分区吗

标签 database oracle partitioning

我正在为一个新项目工作,该项目需要根据两列(城市和地区)对表进行分区。 oracle 数据库支持吗?

我之前从事的项目是在创建表时根据一列对数据库进行分区。但我不知道如何使用两列进行分区,我们是使用相同的语义还是不同的语义

CREATE TABLE TEST (....)
PARTITION BY RANGE (date1) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION TEST_INITIAL VALUES less than (DATE '2000-01-01')
);

最佳答案

如果您有 Oracle 12.2 或更高版本,这很容易。使用自动分区。例如,

CREATE TABLE my_auto_partitioned_table
  ( id NUMBER,
    city_name  VARCHAR2(80),
    area_name  VARCHAR2(80),
    other_data VARCHAR2(400) )
PARTITION BY LIST ( city_name, area_name) AUTOMATIC
 ( PARTITION p_dummy VALUES (null, null) )
;

在 12.2 之前,可以使用 LIST-LIST 分区,但这真的很痛苦,因为您必须预先创建所有分区和子分区。例如,

CREATE TABLE my_partitioned_table 
  ( id NUMBER,
    city_name  VARCHAR2(80),
    area_name  VARCHAR2(80),
    other_data VARCHAR2(400) )
PARTITION BY LIST ( city_name )
SUBPARTITION BY LIST ( area_name )
-- if your area names are generic (e.g., "north"/"south" or "downtown"/"suburbs"), 
-- you can use a SUBPARTITION TEMPLATE clause right here...
( PARTITION p_philadelpha VALUES ( 'PHILADELPHIA')
  ( SUBPARTITION p_philly1 VALUES ('SOUTH PHILLY','WEST PHILLY'),
    SUBPARTITION p_philly2 VALUES ('NORTH PHILLY','OLD CITY')
  ),
  PARTITION p_new_york VALUES ( 'NEW YORK')
  ( SUBPARTITION p_nyc1 VALUES ('SOHO'),
    SUBPARTITION p_nyc2 VALUES ('HELL''S KITCHEN')
  )
);

关于database - 我们可以根据两列对 oracle 数据库进行分区吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616680/

相关文章:

mysql - Rails无法使用mysql生成模型

sql-server - sql server 文件流在oracle数据库中等效

oracle 对连接和 where 条件中经常使用的列进行分区

java - 是否可以在没有数据库的情况下在 android 上存储?

mysql - SQL - 选择一个元素出现两次的行

java - 使用Java客户端测试数据库性能

Oracle 12c 哈希加密

mysql - 选择 max(value) 和对应的行,而不使用 rownum 或 limit

MySQL忽略查询中的子分区

apache-spark - PySpark:使用 binaryFiles() 函数读取二进制文件时进行分区