查询性能:多表查询对比。复合查询

Posted

技术标签:

【中文标题】查询性能:多表查询对比。复合查询【英文标题】:Query performance: Query on multiple tables Vs. Composite query 【发布时间】:2015-07-13 17:17:38 【问题描述】:

表 A 有列 srno 和其他几列。

表 B 有列 srnoid

我想从 B 中获取给定 idsrno,然后从表 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);

两者都在做同样的事情。但是当两个表中都有大量记录时,性能方面哪个更好?还是两者都具有相同的性能? (假设这里已经对这两个表进行了适当的索引等操作。我只是想要这两个查询之间的性能比较)

【问题讨论】:

查询不等价。第一个需要distinct,或者您需要保证join 没有生成重复项。 【参考方案1】:

您的第二个查询总是会变慢。 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;

【讨论】:

以上是关于查询性能:多表查询对比。复合查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 多表查询

MySQL 多表查询(Day43)

11-[记录操作]--多表查询

4 - MySQL:多表查询

mysql-----04 多表查询

MySQL五-2:多表查询