首页 > 下面哪条sql语句执行效率更快?

下面哪条sql语句执行效率更快?

SELECT * FROM A t1
INNER JOIN B t2 ON t1.id=t2.id AND t1.user = '123'


SELECT * FROM A t1
INNER JOIN B t2 ON t1.id=t2.id 
WHERE t1.user = '123'

SELECT * FROM (SELECT * FROM A WHERE user = '123')  t1
INNER JOIN B t2 ON t1.id=t2.id 

这三条sql的效果应该都是一样的,想问一下,哪一条效果更好?(我个人使用第三条,被别人被喷了,理由是创建了一个临时表,加重了负担,推荐我用第一条)


建议使用第二条,逻辑上更清晰一些
t1.id=t2.id是表关联的条件,t1.user = '123'是过滤条件,不建议放到一起。

第三条,如果是oracle数据库的话,不存在临时表的说法,在执行效率上和第一条应该是等价的。


你可以在SQL前加EXPLAIN看一下性能分析

EXPLAIN 
SELECT * FROM (SELECT * FROM A WHERE user = '123')  t1
INNER JOIN B t2 ON t1.id=t2.id;

在这里1和2是一样的,你可以用EXPLAIN EXTENDED+SHOW WARNINGS看一下MySQL怎样解析这两条SQL。

EXPLAIN EXTENDED
SELECT * FROM A t1
INNER JOIN B t2 ON t1.id=t2.id 
WHERE t1.user = '123';
SHOW WARNINGS;
EXPLAIN EXTENDED
SELECT * FROM A t1
INNER JOIN B t2 ON t1.id=t2.id AND t1.user = '123';
SHOW WARNINGS;
【热门文章】
【热门文章】