假设我有一个名为 numbers 的表:
userID ColA ColB
------------------
25 10 11
25 10 16
28 10 11
28 10 16
29 12 14
29 10 16
我想找到用户 ID 为 28 且 colA = 10 和 colB = 16 的所有行
我的问题是查询结构。如果我先查找 userID,然后查找 colA 和 colB 值,例如
select * from numbers where userID=28 AND (colA=10 AND colB=16)
这比首先查找值更快吗?
select * from numbers where (colA=10 AND colB=16) AND userID=28
还是真的没有太大区别?我想我是在询问引擎如何读取查询结果,因为 (colA=10 AND colB=16) 的结果多于 userID=28。因此,我会先假设最少的可能?
我也了解索引等。
最佳答案
您的 RDBMS 将为该查询找出最佳执行计划。您将无法更改这些子句的顺序来提高性能,因为 RDBMS 在制定计划时已经考虑了类似的事情。
您可以使用 EXPLAIN命令以查看有关 RDBMS 决定使用的实际执行计划的更多信息。
关于mysql - 查询优化 - WHERE 子句中的表达式顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146586/