我有一个包含4个表的MySQL JOIN:
直接链接
SELECT col1, col2, col3... col12 FROM
(((tbl1 LEFT JOIN tbl2...) LEFT JOIN tbl3 ...) LEFT JOIN tbl4);
子选择
(SELECT col10 .. col12 FROM
(SELECT col7 .. col9 FROM
(SELECT col1, ... col6 FROM tbl1
LEFT JOIN tbl2) AS J1
LEFT JOIN tbl3) AS J2
LEFT JOIN tbl4...)
两种方法之间是否存在效率差异?我的直觉是,子选择使用SELECT ... WHERE子句丢弃不必要的行和列,使JOIN更快,内存更少。有什么建议?其他数据库怎么样?
答案 0 :(得分:0)
这取决于您的表格大小和查询过滤后的数据。
条件1: 如果您的表大小正常(假设所有表都有大约5000行)并且您从表中提取数据而没有任何过滤,那么即使第一次查询可以提供更好的性能,两个查询也不会有任何差异。
条件2: 如果你的表有庞大的数据假设数十亿行,但在过滤数据之后,实际数据集已经假定接近大约。低于100行,然后第二次查询可以更好。
没有硬性规定,您必须根据表数据大小和要求以各种方式检查查询性能。拇指规则是,如果我们可以减少不同表的连接的数据大小,那么它将提高性能。
答案 1 :(得分:0)
它将取决于表的大小,通常您的第一个查询将比第二个查询更快,因为与第二个相比,评估周期会更短。