查询性能:多表查询对比。复合查询
Posted
技术标签:
【中文标题】查询性能:多表查询对比。复合查询【英文标题】:Query performance: Query on multiple tables Vs. Composite query 【发布时间】:2015-07-13 17:17:38 【问题描述】:表 A 有列 srno
和其他几列。
表 B 有列 srno
和 id
。
我想从 B 中获取给定 id
的 srno
,然后从表 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;
【讨论】:
以上是关于查询性能:多表查询对比。复合查询的主要内容,如果未能解决你的问题,请参考以下文章