mysql 中的 where 子句层次结构是什么
what is the where clause hierarchy in mysql
我在面试中遇到过这个问题。他们问有没有等级制度。
例如:SELECT * FROM invoice WHERE invoiceID=100 AND grossAmount>2000 AND customerName= 'Adam'
是否有特殊的层次结构来添加这 3 个条件?比如先检查数字条件?
请给我你的意见。
查询优化器将查看 WHERE 子句中的条件,并按照它发现的任何顺序对其进行评估:
- 确保正确性
- 利用数据库的索引和其他信息
例如,如果您在 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
。只有在存在相同运算符的情况下,它才会到达 =
+
等。检查文档的顺序。
我在面试中遇到过这个问题。他们问有没有等级制度。
例如:SELECT * FROM invoice WHERE invoiceID=100 AND grossAmount>2000 AND customerName= 'Adam'
是否有特殊的层次结构来添加这 3 个条件?比如先检查数字条件?
请给我你的意见。
查询优化器将查看 WHERE 子句中的条件,并按照它发现的任何顺序对其进行评估:
- 确保正确性
- 利用数据库的索引和其他信息
例如,如果您在 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
。只有在存在相同运算符的情况下,它才会到达 =
+
等。检查文档的顺序。