urs*_*ion 13 mysql performance join query-performance
如果所有连接都提供相同的结果,哪个连接性能更好?例如,我有两个表employees(emp_id,name, address, designation, age, sex)和work_log(emp_id,date,hours_wored). 获得一些特定的结果inner join并left join给出相同的结果。但是,我还有一些疑问,不仅限于这个问题。
jyn*_*nus 21
没有“更好”或“更差”的连接类型。它们具有不同的含义,必须根据含义使用它们。
在你的情况,你可能不会有任何员工work_log(该表中没有行),所以LEFT JOIN并JOIN会在结果等同。但是,如果你有这样的事情(一个没有注册的新员工work_log),一个JOINwold 会忽略那个员工,而左连接(第一个表是员工)会显示所有这些,work_log如果没有,则字段为空火柴。

图片由 CL Moffatt 在代码项目中提供
同样,性能是查询正确性的次要因素。有人说你不应该使用LEFT JOINs。确实,aLEFT JOIN强制优化器以特定顺序执行查询,从而在某些情况下阻止了某些优化(表重新排序)。这是一个例子。但是如果牺牲了正确性/意义,你不应该选择一个而不是另一个,因为 anINNER JOIN本质上并不是更糟。其余的常用优化照常应用。
总而言之,LEFT JOIN如果您的意思是INNER JOIN.
在 MySQL 中CROSS JOIN,INNER JOIN和JOIN是一样的。在标准和语义上, aCROSS JOIN是INNER JOIN不带ON子句的,因此您可以获得表之间的所有行组合。
您在 Wikipedia 上有所有语义类型的连接示例。实际上,在 MySQL 中,我们倾向于只编写JOIN和LEFT JOIN.