我们有超过3米记录的表格。使用innerjoin
时,它比select * from db1,db2 where db1.field=db2.field
有什么想法吗?
答案 0 :(得分:5)
INNER JOIN不应该与SELECT FROM t1,t2 WHERE t1.c = t2.c有任何不同,它只是用于执行相同操作的不同语法,并且由优化器对待它。
性能的任何差异都在查询的其他方面。请发帖:
如果你想要一个合理的答案。
答案 1 :(得分:3)
在常规中,...where db1.field=db2.field...
语法 是内部联接。它只是隐含的符号而不是显式。如果您要加入相同的列并且返回相同的列,则性能应该相同。更多:http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join
答案 2 :(得分:3)
SELECT * from t1,t2 where t1.id = t2.id
相当于
在t1.id = t2.id上从t1 INNER JOIN t2中选择*。
但是,如果SQL查询还有其他条件,则行为可能会有所不同。例如。
SELECT * from t1,t2其中t1.id = t2.id且t1.col1不为空;
可以用INNER JOIN以两种不同的方式编写:
在t1.id = t2.id上的t1 INNER JOIN t2的SELECT *和t1.col1不为空
或
在t1.id = t2.id上从t1 INNER JOIN t2中选择SELECT * t1.col1不为空
这可能会也可能不会成为同一个查询(根据优化器),以及查询其他部分的复杂性。 EXPLAIN PLAN将告诉您是否正在执行相同的查询。
为什么上述查询有所不同?因为对非空的限制是在查询的不同阶段完成的,这可能会对性能产生影响,甚至会对返回的行数产生影响。
答案 3 :(得分:0)
我通常根据需要使用显式INNER JOIN
或LEFT JOIN
语法。当优化器做得不好时,STRAIGHT_JOIN
通常可以对其进行排序,并对查询进行适当的重新排列。
任何涉及大型表的连接都值得使用EXPLAIN
。