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)