Mysql 其中条件以某种方式避免了全表扫描

Mysql 其中条件以某种方式避免了全表扫描,mysql,database-performance,Mysql,Database Performance,在评估创建SQL视图查询的性能时,我注意到在末尾添加WHERE子句时,性能有了显著提高。输出差异不大(行数减少约3%) e、 g vs 检查执行计划时,最大的区别似乎是,其中条件避免了解释速度差异的全表扫描。为什么呢 编辑:显示执行操作的屏幕截图,其中有条件vs没有条件 (即使有截图,也没有足够的信息来智能地回复。但我可以猜一猜…) 当遇到连接时,,优化器通常(但并非总是)使用这些规则来决定从哪个表开始: 从似乎具有最佳WHERE筛选功能的表开始。这可能导致它选择了包含x的表。即使它是一个完

在评估创建
SQL
视图查询的性能时,我注意到在末尾添加
WHERE
子句时,性能有了显著提高。输出差异不大(行数减少约3%)

e、 g

vs

检查执行计划时,最大的区别似乎是
,其中
条件避免了解释速度差异的全表扫描。为什么呢

编辑:显示执行操作的屏幕截图,其中有条件vs没有条件

(即使有截图,也没有足够的信息来智能地回复。但我可以猜一猜…)

当遇到
连接时,
,优化器通常(但并非总是)使用这些规则来决定从哪个表开始:

  • 从似乎具有最佳
    WHERE
    筛选功能的表开始。这可能导致它选择了包含
    x
    的表。即使它是一个完整的表格扫描,选择那个表格可能会更好

  • 从“最小”的表开始

注意:它扫描“第一个”表;对于该表中的每一行,它进入“下一个”表,然后进入下一个表,等等。优化器可以根据自己的需要(在约束范围内,例如
LEFT
)对表进行重新排序

实际上,优化器的后续版本使用“基于成本”的分析。然而,上述两条“规则”是有效的


此外,优化器可能会被统计信息误导,或者缺少统计信息,而这些统计信息是查询计划的基础。

请添加“避免完整表扫描”的执行计划。它执行的是什么操作而不是
all
解释的是什么?添加的屏幕快照您在哪里得到了这种形式的输出?请为每个表提供完整的查询、其
解释
显示创建表
。确保用它来自的表限定每个列。即使未编制索引,表
x
的来源可能会有很大的不同。
SELECT x,y,z  
FROM (multiple table joins/sub queries)
SELECT x,y,z  
FROM (multiple table joins/sub queries)  
WHERE x >= 0 (x is not indexed)