现在我想加入两个表。请告诉我哪种方法会更好:
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优化器会自动执行此操作吗?
答案 0 :(得分:1)
为获得最佳性能的最佳镜头,请优先考虑第二个查询中的模式,即没有内联视图的查询。
对于早期版本的MySQL(版本5.5及更早版本),第一个查询将要求MySQL运行内联视图查询,并实现派生表(u
)。完成后,外部查询将针对派生表运行。该表不会被编入索引。对于大型集合,这可能是一个重大的性能影响。对于小集合,单个查询的性能影响不明显。
使用第二个查询,不会强制优化器创建和填充派生表,因此可能会提高性能。
合适的索引(或索引的不存在)i0ndexes的存在将对性能产生更大的影响。并且检索所有列(包括查询不需要的列(SELECT *))也会对性能产生影响。指定列的子集(实际需要的表达式)将提供更好的性能,尤其是当覆盖索引可用于避免查找表的基础数据页时。