这与MYSQL查询中的JOIN相同吗?

时间:2011-09-20 13:37:20

标签: mysql join query-optimization

这是我的问题:

这看起来效率如何?使用JOIN有优势吗?或者这是一样的吗?

$query_Recordset2 = 
"SELECT cute_news.category, cute_news.id, cute_story.short, cute_story.post_id, cute_news.date, cute_news.url, cute_news.title 
FROM cute_news, cute_story 
WHERE cute_news.id = cute_story.post_id AND category LIKE '10%' 
ORDER BY date DESC LIMIT 0,35";

3 个答案:

答案 0 :(得分:6)

此问题可能与that one重复。

隐式JOIN不带意图,因此可读性较差。

您的查询将导致与以下内容完全相同的结果:

SELECT cute_news.category, cute_news.id, cute_story.short, cute_story.post_id, cute_news.date, cute_news.url, cute_news.title 
FROM cute_news
 INNER JOIN cute_story ON cute_story.post = cute_news.id
WHERE category LIKE '10%' 
ORDER BY date DESC LIMIT 0,35

但后一个查询更具可读性,因为您将JOIN谓词与过滤器分开并表达查询背后的逻辑。

答案 1 :(得分:3)

  

“隐式连接表示法”仅列出要加入的表(在SELECT语句的FROM子句中),使用逗号分隔它们。因此,它指定了一个交叉连接,并且WHERE子句可以应用其他过滤谓词(其功能与显式表示法中的连接谓词相当)

来自wikipedia

换句话说,它是相同的

答案 2 :(得分:2)

如果你的意思是FROM子句有多个表,逗号分隔,那么是,它基本上与INNER JOIN相同。

然而,这是旧语法;最好使用INNER JOIN,这是更标准的。

此外,旧语法的问题在于,通过将连接字段与WHERE子句的其余部分组合,可能会使查询难以阅读,并且在某些情况下会导致解析器的额外工作。最好明确说明每个ON的{​​{1}}子句中的关系。