2

我对where条件感兴趣;如果我写:

Select * from table_name 
where insert_date > '2010-01-03' 
and text like '%friend%';

是否不同于:

Select * from table_name 
where text like '%friend%'  
and insert_date > '2010-01-03';

我的意思是如果表很大,有很多行,如果 mysql 首先获取符合条件“ where insert_date > '2010-01-03' ”的记录,然后在这些记录中搜索单词“friend”,它可以是比从第一次搜索“朋友”行和查看日期字段快得多。

聪明地写where条件重要,还是mysql分析条件并以最好的方式重写where条件?

谢谢

4

4 回答 4

3

不,两个 where 子句应该是等价的。无论您使用哪个,优化器都应该选择相同的索引。

不过,索引中列的顺序确实很重要。

如果你认为优化器使用了错误的索引,你可以给它一个提示。但通常情况下,使用它选择使用的索引是有充分理由的,因此除非您确切知道自己在做什么,否则给优化器提示通常会使事情变得更糟而不是更好。

于 2010-02-03T12:15:53.297 回答
2

我不特别了解 MySQL,但通常这种优化留给数据库引擎,因为哪个顺序更快取决于索引、数据的基数和数据量等。

于 2010-02-03T12:15:04.593 回答
0

我认为这是真的,这两个 where 子句在数据库抽象中都相似

于 2010-02-03T12:18:49.580 回答
0

根据定义,逻辑连接(AND 运算符)是可交换的。这意味着WHERE A AND B等于WHERE B AND A

您编写条件的顺序没有区别。

但是,不同之处在于您在表上放置了哪些索引。查询分析器将这些考虑在内。它也很聪明,可以先找到最容易检查和应用的条件部分。

于 2010-02-03T12:19:31.500 回答