如果不满足查询中的条件,mysql会移动到下一行吗?

时间:2017-01-09 23:35:22

标签: mysql performance optimization query-optimization

我想知道执行查询时Mysql操作的顺序。 例如,如果我有一个类似的查询:

select * from Posts where year>2016 and name like '%A%' and veryExpensiveFunction(this,that) and age>12;

如果不满足第一个条件(年> 2016),mysql会移动到下一行,还是确定其所有条件的结果然后说' whoops ...条件#1不是&#39甚至遇到了...所以继续前进到下一行'。看起来如果我的条件非常昂贵,我想把它放在最后。

你有什么看法。我想它只是评估一个大的'和'链条一个接一个...如果它们没有被满足......它继续前进

1 个答案:

答案 0 :(得分:1)

通常,您要查找的是查询计划。 MySQL有一个Explain语句,它将告诉你它如何评估一个特定的语句。对于RDBMS如何评估一个简单的查询,没有简单的答案,因为很大程度上取决于标准中的列是否有索引,以及其他因素,例如最终的排序顺序。我没有MySQL服务器,所以我不能提供一个例子,但是'Explain'的输出会告诉你是否(例如)年份列上有一个索引用于过滤'年份> 2016年'在适用其他标准之前。