sql - MySQL 如何处理 WHERE 测试?

标签 sql mysql where-clause

当我编写一个根据 GET 参数构建 MySQL 请求的 php 页面时,我想知道 MySQL 是否会对请求中的 WHERE 测试进行任何类型的重组,或者只是在它们到来时接受它们。

例如,如果我执行此请求:

SELECT * FROM `table` t WHERE (SELECT `some_value` FROM `another_table` u WHERE `t.id` = `u.id` LIMIT 1) = 10 AND `a_boolean` = 1;

显然,第二个测试更快,并且首先执行它会过滤大量条目,因此另一个测试需要执行的子请求会更少。 那么,MySQL 是否会根据哪一个更快/会过滤最多的条目来重新组织测试,还是只是按照给定的顺序执行它们?

最佳答案

是的,MySQL(以及任何 SQL 服务器)在开始工作之前会制定计划,并尝试采取尽可能最快的方法。 Explain给出了有关 MySQL 如何处理查询的一些信息。

关于sql - MySQL 如何处理 WHERE 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3635192/

相关文章:

mysql - 同一个表的多个连接计数错误

c# - 列表属性的 Where 子句

javascript - 使用 MongoDB 在 $where 中传递参数

php - GROUP BY 子句忽略行和数据

mysql - cakephp 在 MAX() 上设置条件

MYSQL 工作台 - 错误 1215 : Cannot add foreign key constraint

arrays - SELECT 查询与 PostgreSQL 的 FUNCTION 性能问题

sql - 连接+时间差

mysql - 如何将 mysql 查询转换为 microsoft sql 查询

java - 显示数据库中的 JTable 和计算公式