我正在研究如何构造一个PostgreSQL表来存储大量时间戳数据,这些数据也需要被另一个字段分割。我期望的数据结构如下:
CREATE TABLE event (
event_time timestamp not null,
object_sha char(64) not null, ; sha256 as hex digits
username text not null, ; actual name not a foreign key
payload jsonb not
我需要对大小为100亿行的三列表t (s,p,o)运行200万次查询。每一列的数据类型为字符串。
只有两种类型的查询:
select s p o from t where s = param
select s p o from t where o = param
如果我将表存储在Postgresql数据库中,则使用Java ThreadPoolExecutor需要6个小时。
你认为Spark能更快地处理查询吗?最好的策略是什么?以下是我的想法:
将表加载到一个dataframe中,并启动对dataframe的查询。
将表加载到parquet数据库中,并对该数据库启动查询
提到,我决定每年重复这些表,创建具有年度数据的表,例如:
orders_2008
orders_2009
orders_2010
etc...
嗯,我知道速度问题可能可以用两个表来解决,比如orders_history和order_actual,但是我认为一旦编写了处理程序代码,就不会有什么区别了。只有几张桌子。
这些表甚至会有一些带有外键的子表;例如,orders_2008将有子表items_2008:
CREATE TABLE orders_2008 (
id serial NOT NULL,
code character(5),
customer text
);
我有一个场景,其中我有两个Hive表,而第二个基本上是第一个改进的模式(在这个例子中它还有1列)。
Table_A
{
business_date String
Name String
Age Number
} partitioned by business_date
Table_B {
business_date String
Name String
Age Number
Address String
} partitioned by business_date
为了使下游用户不受模式更改的影响,我使用以下语法创建了一个Hive视图:
Create VIEW customer_info A
理论问题,
假设我有一个包含四列的表: A、B、C、D。A和D的值相等,表由列A分区。
在性能方面,如果我发出这个查询SELECT SUM(B) GROUP BY A,或者这个查询SELECT SUM(B) GROUP BY D,会有什么不同;
换句话说,在分区列上使用GROUP by是否会带来性能上的提升?
谢谢
我有以下情况:
TableA (ID GUID, Type INT) : +60M rows
TableB (ID GUID) : +5M rows
TableA有一个ID索引和TableB类型,主键是ID
我需要改进以下查询:
SELECT * FROM TableA A
INNER JOIN TableB B
ON A.ID = B.ID AND A.Type = 5
查询大约需要30秒才能完成。
我们尝试过在Type列上分区TableA,但是查询执行时间保持不变。甚至执行计划也是一样的。据我所知,对表进行分区应该大大提高性能?
是否必须调整查询以使用分区,从而提高性能?我的索引错了
我有桌子
create table big_table (
id serial primary key,
-- other columns here
vote int
);
这个表非常大,大约有7000万行,我需要查询:
SELECT * FROM big_table
ORDER BY vote [ASC|DESC], id [ASC|DESC]
OFFSET x LIMIT n -- I need this for pagination
正如您可能知道的,当x是一个大数字时,这样的查询非常慢。
为了优化性能,我添加了索引:
create index vote_order_asc on b
背景: MySQL 5.7,InnoDB引擎
我们有一个巨大的事务日志表(每天新增600万行),我们希望将这个巨大的表分割成多个mysql实例和表(所以我们有table_001、table_002等)。用户经常查询最近的行,这意味着最近的行是热的,而旧的行是冷的。
我想知道在这种情况下,是否仍然需要在每个分割表(table_001、table_002等)中使用mysql分区。我的意见是没有。如果我们已经将数据分成了许多子表,为什么我们还需要使用分区的另一种子表呢?(分区实际上在内部是单独的表,对吗?)
我想优化我的PostgreSQL数据库设计。
目前,我有一个表,列如下:
name - char(4)
color - char(6)
key - text
value - real[]
主键由多个字段(名称、颜色、键)组成。
我有大约300到400个名字。
每个名字有2000种不同的颜色。
每种颜色都有40000对不同的键值对。
所以每个名字都有2000 x 40000 = 80000000行
我不更新行。
我只在填充数据库时插入新行。
查询速度对我来说很重要:
SELECT value FROM table WHERE name = x AND c
我需要检索由某个列过滤的集合的总计数。收集量为500 K记录。下面是用于检索集合中可用记录总数的查询。SELECT COUNT(1) FROM c where c.Column1 IN ('Data2')。在这里,此查询使用连续令牌从多个集合中检索数据。这会延迟总数的计算结果。请有人告诉我,我们是否可以在不增加RU的情况下使用索引来提高查询性能?