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

阅读 3.9k
2 个回答

建议使用第二条,逻辑上更清晰一些
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;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进