【发布时间】:2019-11-17 18:05:31
【问题描述】:
让我们有两张桌子。
A(id int primary key, groupby int, fkb int, search int, padding varchar(1000))
B(id int primary key, groupby int, search int)
它们是使用以下脚本创建的。第一个表很大(1M 行),第二个较小(10k 行)。
CREATE TABLE A(
id int not null primary key,
groupby int null,
fkb int null,
search int null,
padding varchar(1000) null
) AS
WITH x AS
(
SELECT 0 n FROM dual
union all
SELECT 1 FROM dual
union all
SELECT 2 FROM dual
union all
SELECT 3 FROM dual
union all
SELECT 4 FROM dual
union all
SELECT 5 FROM dual
union all
SELECT 6 FROM dual
union all
SELECT 7 FROM dual
union all
SELECT 8 FROM dual
union all
SELECT 9 FROM dual
), t1 AS
(
SELECT ones.n + 10 * tens.n + 100 * hundreds.n + 1000 * thousands.n + 10000 * tenthousands.n + 100000 * hundredthousands.n as id
FROM x ones, x tens, x hundreds, x thousands, x tenthousands, x hundredthousands
), t2 AS
(
SELECT id,
mod(id, 100) groupby
FROM t1
)
SELECT cast(id as int) id,
cast(groupby as int) groupby,
cast(mod(orderby, 9173) as int) fkb,
cast(mod(id, 911) as int) search
FROM t2;
CREATE TABLE B(
id int not null primary key,
groupby int null,
search int null
) AS
WITH x AS
(
SELECT 0 n FROM dual
union all
SELECT 1 FROM dual
union all
SELECT 2 FROM dual
union all
SELECT 3 FROM dual
union all
SELECT 4 FROM dual
union all
SELECT 5 FROM dual
union all
SELECT 6 FROM dual
union all
SELECT 7 FROM dual
union all
SELECT 8 FROM dual
union all
SELECT 9 FROM dual
), t1 AS
(
SELECT ones.n + 10 * tens.n + 100 * hundreds.n + 1000 * thousands.n as id
FROM x ones, x tens, x hundreds, x thousands
)
SELECT cast(id as int) id,
cast(mod(id + floor(100000 / (id+1)) , 100) as int) groupby,
cast(mod(id, 901) as int) search,
rpad(concat('Value ', id), 1000, '*') as padding
FROM t1;
我想尽快在 H2 中处理以下条件聚合查询,但不添加任何其他索引。
SELECT B.groupby,
count(CASE WHEN A.search = 1 THEN 1 END) as search1,
count(CASE WHEN A.search = 900 THEN 1 END) as search2
FROM B
LEFT JOIN A ON A.fkb = B.id
WHERE B.search < 10
GROUP BY B.groupby
是否可以重写查询最多运行 2 分钟的查询?我尝试了许多不同的重写,但是,每一个都持续运行几分钟而没有结束。我将 Java 虚拟机内存设置为 4GB (-Xmx4G)。
如果我在 MySQL 中尝试相同的测试并且查询的处理时间少于 10 秒。
【问题讨论】:
标签: sql h2 conditional-aggregation