繁体   English   中英

哪个是带过滤器的更快子查询,然后加入或加入查询,然后在 MYSQL 中过滤

[英]Which is faster subquery with filter and then join or join the queries and then filter in MYSQL

我有两张表,一张是用户表,另一张是专业表。 用户表中的字段:userid、username、userLocation 专业表中的字段:userid、userSpecialty

现在我想加入两个表。 请让我知道哪种方法会更好:

select * from ( select * from user where userLocation = 'value') u inner join specialty s on u.userid = s.userid; 或者

select * from user u inner join specialty s on u.userid = s.userid where userLocation = 'value';

尽量减少记录数量或 SQL 优化器会自动做到这一点是一种很好的做法吗?

为了获得最佳性能,请优先考虑第二个查询中的模式,即没有内联视图的查询。

对于较早版本的 MySQL(5.5 及更早版本),第一个查询将要求 MySQL 运行内联视图查询,并具体化派生表 ( u )。 完成后,外部查询将针对派生表运行。 并且该表不会被索引。 对于大型集,这可能会严重影响性能。 对于小型集合,单个查询的性能影响并不明显。

对于第二个查询,优化器不会被迫创建和填充派生表,因此有可能获得更好的性能。

存在合适的索引(或不存在索引)i0ndex 将对性能产生更大的影响。 检索所有列,包括查询不需要的列 (SELECT *) 也会对性能产生影响。 指定列的一个子集,即实际需要的表达式,将提供更好的性能,尤其是当覆盖索引可用以避免查找表的基础数据页时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM