【发布时间】:2014-05-14 05:17:31
【问题描述】:
我需要通过检查多个表的单个条件来从表中检索数据。这是一个示例,如下所示:
create table tb1 (
slno int,
name text,
address text
);
create table tb2 (
slno int,
fname text,
faddress text
);
create table tb3 (
slno int,
mname text,
maddress text
);
create table tb4 (
slno int,
lname text,
laddress text
);
insert into tb1 values(1,'aaa','bbb');
insert into tb1 values(2,'2aaa','2bbb');
insert into tb1 values(3,'3aaa','3bbb');
insert into tb1 values(4,'4aaa','4bbb');
insert into tb1 values(5,'5aaa','5bbb');
insert into tb2 values(1,'faaa','fbbb');
insert into tb2 values(2,'f2aaa','f2bbb');
insert into tb2 values(3,'f3aaa','f3bbb');
insert into tb2 values(4,'f4aaa','f4bbb');
insert into tb2 values(5,'f5aaa','f5bbb');
insert into tb3 values(1,'maaa','mbbb');
insert into tb3 values(2,'m2aaa','m2bbb');
insert into tb3 values(3,'m3aaa','m3bbb');
insert into tb3 values(4,'m4aaa','m4bbb');
insert into tb3 values(5,'m5aaa','m5bbb');
insert into tb4 values(1,'laaa','lbbb');
insert into tb4 values(2,'l2aaa','l2bbb');
insert into tb4 values(3,'l3aaa','l3bbb');
insert into tb4 values(4,'l4aaa','l4bbb');
insert into tb4 values(5,'l5aaa','l5bbb');
查询:
select distinct t2.slno
from
tb1,
tb2 as t2,
tb3 as t3,
tb4 as t4
where
tb1.slno = t2.slno or
t2.slno = t3.slno or
t3.slno = t4.slno;
注意:上述查询使我的任务完成,但对于大量数据的执行花费了更多时间。
问题:
1.如何降低时间复杂度?
2. 还有比这个更好的方法吗?
【问题讨论】:
-
也许 PostgreSQL 分区可能有用?我最近阅读了以下关于分区的讨论,发现它非常有启发性。 github.com/fiksu/partitioned/blob/master/…
-
你为什么要创建这些编号的表格?这样做的目的/目的是什么?
-
这些表上没有任何索引。至少您应该在连接列上创建索引。请停止在 where 子句中使用旧的、过时的隐式连接,并开始使用显式
JOIN -
@a_horse_with_no_name,谢谢。
-
use-the-index-luke.com 是对索引的极好介绍。
标签: performance postgresql join cross-join