mysql在哪里条件

时间:2010-02-03 12:12:44

标签: mysql where-clause

我对条件在哪里感兴趣;如果我写:

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” “它可以比第一次搜索”朋友“行快得多,而不是查看日期字段。

巧妙地写出条件在哪里很重要,或者mysql分析条件并以最佳方式重写条件?

感谢

4 个答案:

答案 0 :(得分:3)

不,两个where子句应该是等价的。优化程序应选择使用相同的索引。

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

然而,有什么不同之处在于您在桌面上拥有的索引。查询分析器将这些考虑在内。它也足够聪明,可以找到最容易检查并最先应用该条件的条件部分。