我有两条潜在的道路可以解决以下问题,由于服务器上的负载不断变化,因此尝试并查看方法不会为该解决方案带来回报。我有两种方法如下:
select *
from
(
select foo.a,bar.b,baz.c
from foo,bar,baz
-- updated for clarity sake
where foo.a=b.bar
and b.bar=baz.c
)
group by a,b,c
副
create table results as
select foo.a,bar.b,baz.c
from foo,bar,baz
where foo.a=b.bar
and b.bar=baz.c ;
create index results_spanning on results(a,b,c);
select * from results group by a,b,c;
所以万一不清楚。顶部查询直接针对多表选择执行分组,从而阻止我使用索引。第二个查询允许我创建一个存储查询结果的新表,继续创建一个跨越索引,然后按查询完成分组以利用索引。
这两种方法的复杂性差异是什么,即它们如何扩展以及在大量数据的情况下哪种方法更可取。此外,主要问题是整体选择的性能,所以这就是我试图在这里解决的问题。
注释
你真的在三个表上做一个 CROSS JOIN 吗?这三列是否单独编入索引?您希望多久运行一次提供最终结果的查询?
1) 不。
2) 是的,为了讨论而省略了 where 子句,因为这显然是一个非常微不足道的例子
3) 没关系。
第二次更新
这是一个临时表,因为它只在短时间内有效,所以是的,这个表只会被查询一次。