我正在使用带有区间分区的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}
据我所知,从MySQL 5.5开始,您现在可以通过非整数值(如varchar)对表进行分区.我有一个表,我在一个varchar列上执行了很多查找,因此出于性能原因我想对其进行分区.
在所有情况下,列的值都是单个字母单词(严格小写的az,由验证强制执行).
我想要做的是用存储的每个单词的第一个字母来分隔这个表,所以所有以'a'开头的单词都在第一个分区中,'b'在第二个分区中等等.
我的直觉是我可能构造create/alter table语句来使用LIKE语句,但我不确定语法.
有没有人使用MySQL 5.5做过这样的事情?
我目前有几个审计表来审计特定的表数据.
例如,ATAB_AUDIT,BTAB_AUDIT和CTAB_AUDIT分别审核来自ATAB,BTAB和CTAB的插入,更新和删除.
这些审计表按年划分.
由于这些审计表中的列是相同的(change_date,old_value,new_value等),因此使用一个大型审计表是有益的,添加一个包含生成审计记录的表名称的列(table_name)按table_name对其进行分区然后逐年分区?
该数据库是Solaris上的Oracle 11g.
为什么或为什么不这样做?
提前谢谢了.
我有以下表结构,其中包含实时数据:
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) 以下两个查询之间是否存在性能差异?如果是,那么哪个更好?:
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 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
为什么下面的查询计划中包含表“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
我有两个大数据框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
我有 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
我们正在使用公共数据集对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中有好处,但查询速度较慢。
决定何时进行分区的好策略是什么?
(从我今天收到的电子邮件中)
oracle ×3
mysql ×2
oracle11g ×2
sql ×2
apache-spark ×1
dataframe ×1
group-by ×1
left-join ×1
ora-00933 ×1
oracle12c ×1
partitioning ×1
postgresql ×1
sql-server ×1