mysql 中的 where 子句层次结构是什么

what is the where clause hierarchy in mysql

我在面试中遇到过这个问题。他们问有没有等级制度。
例如:SELECT * FROM invoice WHERE invoiceID=100 AND grossAmount>2000 AND customerName= 'Adam'
是否有特殊的层次结构来添加这 3 个条件?比如先检查数字条件? 请给我你的意见。

查询优化器将查看 WHERE 子句中的条件,并按照它发现的任何顺序对其进行评估:

  1. 确保正确性
  2. 利用数据库的索引和其他信息

例如,如果您在 invoiceID 上有一个索引,它可能会首先对其进行评估,以便在检查 customerName 和 grossAmount 时检查的行数较少。

您的示例是所有 'AND' 个子句,因此不涉及优先级。

这里是 Oracle 网站上的official documentation

在您的情况下,查询将 运行 如其所写,因为 =< 具有相同的运算符优先级。

SELECT * FROM invoice WHERE (invoiceID=100 AND grossAmount>2000 AND customerName= 'Adam')

如果它是一个 OR 子句

 SELECT * FROM invoice WHERE (invoiceID=100) OR (grossAmount>2000 AND customerName= 'Adam')

然后 AND 会先 运行 然后 OR。只有在存在相同运算符的情况下,它才会到达 = + 等。检查文档的顺序。