Sql 为什么从两个以上的表中获取信息需要更多的时间?

Sql 为什么从两个以上的表中获取信息需要更多的时间?,sql,Sql,这是关于SQL开发人员的。假设我有三张桌子——表1、表2和表3。当我在下面运行查询时 select * from Table1 where coustomer_id in (select custmoer_id from Table2 where city='Pune'); 上述查询在不到2秒的时间内获取结果。 但是,当我试图从两个以上的表中获取信息时,会花费太多的时间。例如: select * from Table3 where building_name in (select buildi

这是关于SQL开发人员的。假设我有三张桌子——表1、表2和表3。当我在下面运行查询时

select * from Table1 where coustomer_id in (select custmoer_id from Table2 where city='Pune');
上述查询在不到2秒的时间内获取结果。 但是,当我试图从两个以上的表中获取信息时,会花费太多的时间。例如:

select * from Table3 where building_name in (select building_name from Table1 where customer_id in (select customer_id from Table2 where city='Pune'));
因此,在这种情况下,与上面的查询相比,它需要更多的时间。
为什么要花这么多时间,有什么解决办法吗?

如果不了解表的结构,就无法确定“更多时间”的含义。但最可能的原因是:

  • 表3
    建筑物名称上没有索引
  • 表3
    中的记录比
    表1
    中的记录多得多
  • Table3
    Table1
    有更多的列

关于表3和表1中的
建筑名称
有索引吗?为了简单起见,您还应该查看
Join
。如果不知道数据库模式以及您查询的数据集有多大,至少对于这些表来说,很难说清楚。但是,在执行这种嵌套选择时,您首先要查找的是这些列的复合索引。@Siyal:Table2
building\u name
上的索引不会提高此查询的速度,除非它是表单
(customer\u id,building\u name)
中的复合索引的一部分。至少有一个子选择(可能两者都有)可以被连接所取代,如果有适当的索引,这将大大提高速度。@KenWhite:你知道现代的数据库引擎对表示为
JOIN
的查询或假设两个查询产生相同结果的子查询产生显著不同的响应时间吗?