查询性能:查询多个表和。复合查询

时间:2015-07-13 17:17:39

标签: mysql database query-performance

表A包含列srno和其他几列。

表B包含srnoid列。

我希望从给定srno的B中获取id,然后从表A中获取该srno的记录。

例如,如果id为7,那么我可以通过两种方式考虑这样做:

select * from A as table_a, B as table_b where table_a.srno=table_b.srno and table_b.id=7;

select * from A where srno in (select srno from B where id=7);

两者都是这样做的。但是当两个表中都有大量的记录时,性能明智哪个更好?或两者都有相同的表现? (我们假设在这两个表上已经处理了正确的索引等。我只想在这两个查询之间进行性能比较)

1 个答案:

答案 0 :(得分:0)

您的第二个查询总是会慢一些。 MySQL中的那种动态IN子句绝不是一个好方法。

我的建议是使用第一个查询,但使用ANSI连接语法重写它并选择所需的最小列集,而不是SELECT *

这将是一个很好的起点:

select table_a.* 
from A as table_a 
inner join B as table_b on table_a.srno=table_b.srno 
where table_b.id=7;