MySQL 在 ORDER BY 之前运行 WHERE 子句吗?

Mic*_*sen 3 mysql optimization order-by where

我有这个查询:

SELECT my_code 
FROM ranges 
WHERE 123456789 BETWEEN first_number AND last_number 
ORDER BY type_of_code ASC LIMIT 1 ;
Run Code Online (Sandbox Code Playgroud)

我的问题是,它会在ORDER BYWHERE子句中选择行之后运行吗?

KEYfirst_numberlast_number。我的桌子大约有 500 万行。我不想ORDER BY先。

Len*_*art 5

评估查询的逻辑顺序是:

  • FROM / JOIN 子句
  • WHERE 子句
  • GROUP BY 子句
  • HAVING 子句
  • SELECT 子句
  • ORDER BY 子句

所以从逻辑的角度来看,是的,WHERE应该在 order by 之前进行评估。

但是,只要保留查询结果,DBMS:s(在本例中为 MySQL)就可以以任何顺序评估查询。因此,在未来的版本中,它可能会以另一个评估顺序评估查询,这可能会导致意外的性能影响。

现在,由于ORDER BY基本上将查询转换为游标,我认为假设该WHERE子句将在ORDER BY(至少只要表是基于行的,对于基于列的表,情况可能会有所不同)之前进行评估是非常安全的)。