2016-03-08 51 views
0

我需要建立在MariaDB的范围内/表的复合partitionning,Oracle中的命令是:MariaDB的组合分区

CREATE TABLE t1 (
    id Integer, 
    pdateid Integer) 
TABLESPACE tbs_t1 
PARTITION BY RANGE (pdateid) 
    SUBPARTITION BY LIST (id) 
    SUBPARTITION TEMPLATE 
    (
     SUBPARTITION SP1 VALUES (1,2), 
     SUBPARTITION SPDEF VALUES (DEFAULT) 
    ) 
(
    PARTITION APR_2015 VALUES LESS THAN (3043) tablespace tbs_t1_APR, 
    PARTITION MAY_2015 VALUES LESS THAN (3074) tablespace tbs_t1_MAY 
) ; 

1 - 这可能是在MariaDB的同一命令的语法,以及如何指定分区存储(例如:tbs_t1_APR)? 2 - 在这种情况下应该选择哪种存储引擎以获得最佳性能? 3 - 哪个命令给出分区的模板?

谢谢

回答

0

执行摘要:忘记Oracle语法;打到MySQL/MariaDB语法的书籍上。有很多的差异。

详情:

NUMBER(*,0) - 也许你想INT

3043对于数据类型DATE不是有效值; '2016-03-08'是。

SUBPARTITIONs对于性能无用;忘掉它们。

“Tablespaces”在MySQL/MariaDB中实际上是无用的;不要打扰他们。

PARTITION BY RANGE (TO_DAYS(partid))可能对你有用。你会有至少一百万行吗?你会丢弃“旧”数据吗?你可以使用大约20-60分区吗?

如果你正在寻找分区中的其他东西;算了吧。这可能不值得追求。

让我们来看看SELECTs,你会打上表格。 (这可能会提供一些关于在哪里进行讨论的线索。)

+0

嗨,詹姆斯,这是一个Id日期(从参考日期 - 2006年1月1日的天数)。是的,这是一个大表,需要清除旧数据。需要在MySql/Mariadb中制定相同的命令,已经在Oracle数据库下进行了分区。谢谢 – dbabti

+0

我对清除旧数据的建议:[my blog](http://mysql.rjweb.org/doc.php/partitionmaint) 。 –

+0

'INTEGER' =='INT' - 4字节数字 - 20亿至+20亿。这足够吗? –