朔州建设机械网站,seo是什么意思如何实现,电影网站cpa怎么做,世界动画专业大学排名前十强主博客#xff1a;
【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客
上一篇#xff1a;
【MySQL精通之路】SQL优化(1)-查询优化(8)-嵌套联接优化-CSDN博客
下一篇#xff1a;
【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化-CSDN博客 外部联接包括LEFT JOIN和…主博客
【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客
上一篇
【MySQL精通之路】SQL优化(1)-查询优化(8)-嵌套联接优化-CSDN博客
下一篇
【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化-CSDN博客 外部联接包括LEFT JOIN和RIGHT JOIN。
MySQL实现了一个A LEFT JOIN B 连接规范如下所示 表B被设置为依赖于表A以及A所依赖的所有表。 表A被设置为依赖于LEFT JOIN条件中使用的所有表B除外。 LEFT JOIN条件用于决定如何从表B中检索行。换句话说不依赖WHERE子句中的任何条件。 执行所有标准联接优化但表总是在它所依赖的所有表之后读取。如果存在循环依赖关系则会发生错误。 执行所有标准WHERE优化。 如果a中有一行与WHERE子句匹配但B中没有一行与ON条件匹配则会生成一个额外的B行所有列都设置为NULL。 如果您使用LEFT JOIN查找某些表中不存在的行并且您有以下测试WHERE部分中的col_name为NULL其中col_name是声明为not NULL的列MySQL在找到一行符合LEFT JOIN条件后将停止搜索更多行针对特定的键组合。 RIGHT JOIN实现类似于LEFT JOIN表角色颠倒。 如“外部联接优化”所述右联接转换为等效的左联接。 对于LEFT JOIN如果生成的NULL行的WHERE条件始终为false则LEFT JON将更改为内部联接。例如如果t2.column1为NULL则以下查询中的WHERE子句将为false
SELECT * FROM t1 LEFT JOIN t2 ON (column1) WHERE t2.column25; 因此将查询转换为内部联接是安全的
SELECT * FROM t1, t2 WHERE t2.column25 AND t1.column1t2.column1;
在MySQL 8.0.14及更高版本中常量文字表达式产生的不重要的WHERE条件在准备过程中被删除而不是在优化的后期阶段。
提前去除掉不必要查询条件允许优化器将外部联接转换为内部联接这可以改进具有外部联接的查询的计划这些联接包含WHERE子句中的琐碎条件例如
SELECT * FROM t1 LEFT JOIN t2 ON condition_1 WHERE condition_2 OR 0 1
优化器现在在准备过程中看到01总是错误的这使得OR 01是多余的并将其删除留下以下内容
SELECT * FROM t1 LEFT JOIN t2 ON condition_1 where condition_2
现在优化器可以将查询重写为内部联接如下所示
SELECT * FROM t1 JOIN t2 WHERE condition_1 AND condition_2
如上联接已被简化现在如果这样做会产生更好的查询计划优化器可以在表t1之前使用表t2。 要提供有关表联接顺序的提示请使用优化器提示 参见“优化器提示”。 或者使用STRIGHT_JOIN参见“SELECT语句”。 但是STRIGHT_JOIN可能会阻止使用索引因为它会禁用半联接转换 请参阅“使用半联接转换优化IN和EXISTS子查询语句”。 主博客
【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客
上一篇
【MySQL精通之路】SQL优化(1)-查询优化(8)-嵌套联接优化-CSDN博客
下一篇
【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化-CSDN博客