在 Mysql Explain SQL 中防止 'ALL' 类型

Posted

技术标签:

【中文标题】在 Mysql Explain SQL 中防止 \'ALL\' 类型【英文标题】:Preventing 'ALL' Type in Mysql Explain SQL在 Mysql Explain SQL 中防止 'ALL' 类型 【发布时间】:2018-02-07 03:20:05 【问题描述】:

我正在尝试理解 mysql Explain,我读到“ALL”类型对性能来说是最差的。我刚刚写了一个非常简单的带左连接的sql

SELECT * FROM production_plan_header pph LEFT JOIN production_plan_details ppd ON ppd.ppd_header_id = pph.pph_id WHERE pph.pph_id =1 

如果我对此使用 EXPLAIN,我会得到以下信息。

id  select_type     table   type    possible_keys   key         key_len      ref    rows    Extra   
1   SIMPLE          pph     const   PRIMARY         PRIMARY     4            const  1   
1   SIMPLE          ppd     ALL     ppd_header_id   NULL        NULL         NULL   7   

如您所见,production_plan_details 的类型为“ALL”。行显示表中的总行数 (7)。 ppd_header_id 列已编入索引。有没有办法从我的 sql 语句中防止这个“ALL”?

【问题讨论】:

【参考方案1】:

我不确定我是否正确地回答了您的问题,但如果您想删除 Type = "ALL" 的行,在这种情况下您可以编写如下查询。

SELECT * 
FROM   production_plan_header pph 
       LEFT JOIN production_plan_details ppd 
              ON ppd.ppd_header_id = pph.pph_id 
WHERE  pph.pph_id = 1 
       AND ppd.type <> "ALL" 

【讨论】:

谢谢,但我的问题是,我能否从简单的 sql 中阻止“ALL”类型,例如“SELECT * FROM production_plan_header pph LEFT JOIN production_plan_details ppd ON ppd.ppd_header_id = pph.pph_id WHERE pph.pph_id =1 ”。我读到使用索引是可能的。刚刚学习编写高效的sql。谢谢

以上是关于在 Mysql Explain SQL 中防止 'ALL' 类型的主要内容,如果未能解决你的问题,请参考以下文章

mysql explain用法

MYSQL explain执行计划

MySQL——通过EXPLAIN分析SQL的执行计划

MySQL Explain详解

MySQL Explain详解

MySQL Explain详解