标签: database-partitioning

Oracle:如何删除特定分区的子分区

我正在使用带有区间分区的oracle 11表,并像这样列出子分区(简化):

CREATE TABLE LOG
(
  ID NUMBER(15, 0) NOT NULL PRIMARY KEY
, MSG_TIME DATE NOT NULL
, MSG_NR VARCHAR2(16 BYTE)
) PARTITION BY RANGE (MSG_TIME) INTERVAL (NUMTOYMINTERVAL (1,'MONTH'))
  SUBPARTITION BY LIST (MSG_NR)
    SUBPARTITION TEMPLATE (
     SUBPARTITION login VALUES ('FOO')
   , SUBPARTITION others VALUES (DEFAULT)
   )
   (PARTITION oldvalues VALUES LESS THAN (TO_DATE('01-01-2010','DD-MM-YYYY')));
Run Code Online (Sandbox Code Playgroud)

如何在不知道子系统的(系统生成的)名称的情况下删除特定月份的特定子分区?有一个语法"alter table ... drop subpartition for(subpartition_key_value,...)"但我没有看到指定我删除子分区的月份的方法.该分区管理指南没有给出任何的例子,无论是.8}

oracle partitioning oracle11g database-partitioning

7
推荐指数
1
解决办法
3万
查看次数

MySQL 5.5分区表由AZ提供

据我所知,从MySQL 5.5开始,您现在可以通过非整数值(如varchar)对表进行分区.我有一个表,我在一个varchar列上执行了很多查找,因此出于性能原因我想对其进行分区.

在所有情况下,列的值都是单个字母单词(严格小写的az,由验证强制执行).

我想要做的是用存储的每个单词的第一个字母来分隔这个表,所以所有以'a'开头的单词都在第一个分区中,'b'在第二个分区中等等.

我的直觉是我可能构造create/alter table语句来使用LIKE语句,但我不确定语法.

有没有人使用MySQL 5.5做过这样的事情?

mysql database-partitioning

6
推荐指数
1
解决办法
4114
查看次数

一个大表分区然后分区或几个较小的分区表?

我目前有几个审计表来审计特定的表数据.

例如,ATAB_AUDIT,BTAB_AUDIT和CTAB_AUDIT分别审核来自ATAB,BTAB和CTAB的插入,更新和删除.

这些审计表按年划分.

由于这些审计表中的列是相同的(change_date,old_value,new_value等),因此使用一个大型审计表是有益的,添加一个包含生成审计记录的表名称的列(table_name)按table_name对其进行分区然后逐年分区?

该数据库是Solaris上的Oracle 11g.

为什么或为什么不这样做?

提前谢谢了.

oracle database-design oracle11g database-partitioning

6
推荐指数
1
解决办法
498
查看次数

转换为分区表

我有以下表结构,其中包含实时数据:

 CREATE TABLE IF NOT EXISTS `userstatistics` (
   `user_id` int(10) unsigned NOT NULL,
   `number_logons` int(7) unsigned NOT NULL DEFAULT '0',
   `number_profileminiviews` int(7) unsigned NOT NULL DEFAULT '0',
   `number_profilefullviews` int(7) unsigned NOT NULL DEFAULT '0',
   `number_mailsreceived` int(7) unsigned NOT NULL DEFAULT '0',
   `number_interestreceived` int(7) unsigned NOT NULL DEFAULT '0',
   `number_favouratesreceived` int(7) unsigned NOT NULL DEFAULT '0',
   `number_friendshiprequestreceived` int(7) unsigned NOT NULL DEFAULT '0',
   `number_imchatrequestreceived` int(7) unsigned NOT NULL DEFAULT '0',
   `yearweek` int(6) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`user_id`,`yearweek`)
 ) …
Run Code Online (Sandbox Code Playgroud)

mysql database-partitioning

6
推荐指数
1
解决办法
5722
查看次数

将GROUP BY与MAX()用作聚合vs ROW_NUMBER优于分区依据,是否存在性能差异?

以下两个查询之间是否存在性能差异?如果是,那么哪个更好?:

    select 
    q.id, 
    q.name 
    from(
        select id, name, row_number over (partition by name order by id desc) as row_num
from table
    ) q
        where q.row_num = 1
Run Code Online (Sandbox Code Playgroud)

select
max(id) ,
name
from table
group by name
Run Code Online (Sandbox Code Playgroud)

(结果集应该相同)

这是假设未设置索引。

更新:我对此进行了测试,并且group by速度更快。

sql group-by sql-server-2008 database-partitioning

6
推荐指数
2
解决办法
4239
查看次数

分区主详细信息表

我使用SQL Server 2008 R2并希望将Master表和Detail表一起分区.如何MasterTypeID在Master表中按字段分区详细信息.

我的分区功能是:

CREATE PARTITION FUNCTION MasterTypeFN(int)
AS 
RANGE LEFT FOR VALUES (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我的分区架构是:

CREATE PARTITION SCHEME MasterTypeScheme 
AS 
PARTITION MasterTypeFN 
TO ([FG1], [FG2], [FG3], [PRIMARY])
Run Code Online (Sandbox Code Playgroud)

我的主表结构是:

CREATE TABLE [dbo].Master  
(
   [MasterID] [int] NOT NULL,
   [MasterTypeID] [int] NOT NULL,
   ...
) 
ON MasterTypeScheme (MasterTypeID)
Run Code Online (Sandbox Code Playgroud)

我的详细信息表结构是:

CREATE TABLE [dbo].Detail
(
   [DetailID] [int] NOT NULL,
   [MasterID] [int] NOT NULL,
   ...
) 
Run Code Online (Sandbox Code Playgroud)

我想关于主分区的Partitioning Detail表.换句话说,我想在一个文件组中保存主表记录和相关详细信息.

sql-server sql-server-2008 sql-server-2008-r2 database-partitioning

6
推荐指数
1
解决办法
1026
查看次数

基于检查约束的分区修剪未按预期工作

为什么下面的查询计划中包含表“events_201504”?根据我的查询和该表的检查约束,我希望查询规划器能够完全修剪它:

database=# \d events_201504
                                   Table "public.events_201504"
    Column     |            Type             |                           Modifiers
---------------+-----------------------------+---------------------------------------------------------------
 id            | bigint                      | not null default nextval('events_id_seq'::regclass)
 created_at    | timestamp without time zone |
Indexes:
    "events_201504_pkey" PRIMARY KEY, btree (id)
    "events_201504_created_at" btree (created_at)
Check constraints:
    "events_201504_created_at_check" CHECK (created_at >= '2015-04-01 00:00:00'::timestamp without time zone AND created_at <= '2015-04-30 23:59:59.999999'::timestamp without time zone)
Inherits: events
Run Code Online (Sandbox Code Playgroud)

时间及配置:

database=# select now();
              now
-------------------------------
 2015-05-25 16:49:20.037815-05

database=# show constraint_exclusion;
 constraint_exclusion
----------------------
 on
Run Code Online (Sandbox Code Playgroud)

查询计划:

database=# explain select count(1) from events where created_at …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-partitioning postgresql-performance postgresql-9.3

6
推荐指数
1
解决办法
3774
查看次数

当数据帧由单列分区时,多列上的高效 Spark 左连接

我有两个大数据框df1并按df2列分区a,我想有效地计算两a列和另一列的左连接b

df1.join(df2, on=['a', 'b'], how='left_outer')

当如上编写时,Spark 通过 key 重新排列两个数据帧(a, b),这是非常低效的。相反,我希望它利用现有的分区a来避免混洗(在每个分区内执行连接),这应该快得多(特别是因为我有进一步的处理步骤可以从这种分区中受益)。

有什么方法可以防止这种洗牌并获得由 分区的结果数据帧a

请注意,如果它是内部连接,我可以执行以下操作,但是 (1) 我不确定它是否有效,并且无论如何 (2) 它不适用于左连接(我只提供以防万一它会帮助别人):

df1.join(df2, on=['a'], how='inner').filter(df1.b == df2.b)

PS:两个数据帧都太大无法广播

left-join database-partitioning dataframe apache-spark apache-spark-sql

6
推荐指数
0
解决办法
752
查看次数

Oracle 12.2 - 替换 NOPARTITION 功能

我有 Oracle 版本 12.2.0.1.0

我们有通用脚本,它创建需要为不同对象重用的序列(通过重命名序列名称):

CREATE SEQUENCE NAME_SEQ MINVALUE 1 MAXVALUE 999999999
INCREMENT BY 1 START WITH 100 CACHE 200 NOORDER  NOCYCLE  NOPARTITION ;
Run Code Online (Sandbox Code Playgroud)

在我删除之前,此脚本无法处理以下错误NOPARTITION

   ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

我在AskTom中发现12.2不支持NOPARTITION

以前版本的数据库中有很多内容不再相关/支持

为什么不支持它和/或此功能的替代品是什么?

如果没有替代品,您能否说明为什么不应使用此功能?

oracle database-partitioning ora-00933 oracle12c database-sequence

6
推荐指数
1
解决办法
4214
查看次数

确定何时在BigQuery中对表进行分区的最佳平衡是什么?

我们正在使用公共数据集对BigQuery进行基准测试。我们使用了同一张表并按天对其进行了分区,但是尚不清楚我们会获得很多好处。有什么好的平衡点?

SELECT  sum(score) 
FROM `fh-bigquery.stackoverflow_archive.201906_posts_questions` 
WHERE creation_date > "2019-01-01" 
Run Code Online (Sandbox Code Playgroud)

耗时1秒,处理270.7MB。

相同,但具有分区:

SELECT  sum(score) 
FROM `temp.questions_partitioned` 
WHERE creation_date > "2019-01-01"
Run Code Online (Sandbox Code Playgroud)

耗时2秒,处理14.3 MB。

因此,我们发现在处理的MB中有好处,但查询速度较慢。

决定何时进行分区的好策略是什么?

(从我今天收到的电子邮件中)

database-cluster database-partitioning google-bigquery

6
推荐指数
1
解决办法
199
查看次数