2010-12-20 79 views
0

这两个mysql查询返回相同的结果集。要么给我我想要的结果。但是一个比另一个更可取?两个mysql查询,结果相同:比另一个更好?

SELECT links.*, users.user_name 
FROM links 
LEFT JOIN terms 
ON links.link_id = terms.terms_link_id 
LEFT JOIN users 
ON links.link_user = users.user_id 
WHERE terms.terms_tag_id = ? 

-

SELECT links.*, users.user_name 
FROM links, users, terms 
WHERE links.link_id = terms.terms_link_id 
AND links.link_user = users.user_id 
AND terms.terms_tag_id = ? 
+0

做需要明确的是 - 目前只有PHP的字符串。如果你想特别询问**查询** - 避免除sql以外的任何内容。 – zerkms 2010-12-20 03:17:17

+2

顺便说一句,因为你使用'LEFT JOIN' - 这两个查询可能会返回**不同的结果**。 – zerkms 2010-12-20 03:19:25

回答

1

两者都是

SELECT links.*, users.user_name 
FROM links 
INNER JOIN terms 
    ON links.link_id = terms.terms_link_id AND terms.terms_tag_id = $tag_id 
INNER JOIN users 
    ON links.link_user = users.user_id; 

只有一个规则

  • 做一个执行计划,DESC EXTENDED YOUR_QUERY;检查如何优化可以在MySQL
+0

只读:“小心您不应该对连接的ON子句中要返回的行进行限制;只应将t1.col1 = t2.col2(其中t1和t2为表别名)的连接条件放置在此处。结果集应放置在WHERE子句中。“从Jon Stephens和Chad Russell的“Beginning MySQL Database Design and Optimization:From Novice to Professional”开始,由Apress于2004年出版。这表明AND之后的条件应该在WHERE子句中,因为它正在过滤结果集。为什么会这样建议? – 2010-12-20 05:53:59

+0

@mos恋物癖 - 好吧,对两个查询都做一个'show profiles',哪个性能更好? – ajreal 2010-12-20 06:12:42

3

貌似这个回答你的问题: Inner join vs Where

+0

是的,但第三个选项,第一个查询的变化,将where子句元素移动到左侧连接子句的条款可能会消除要检查的记录数并稍微更快... – Tahbaza 2010-12-20 03:22:11

相关问题