mysql查询性能:字段位置

时间:2013-02-22 10:16:44

标签: mysql performance

是否有任何查询规则说明哪个更好首先过滤以获得最佳性能?例如:

SELECT * FROM table WHERE date <= '2012-08-01' AND random_field = 4684 AND primary_field = 355

VS

SELECT * FROM table WHERE random_field = 4684 AND primary_field = 355 AND date <= '2012-08-01'

哪个更快? where字段子句在查询中的位置是否会影响性能? 我们应该比较

  • 主要领域首先?
  • 首先是索引字段?
  • 首先是整数字段?
  • 日期字段第一个?
  • 字符串字段第一个?
  • 子查询字段首先?

你知道有什么好的流行的mysql查询指南吗?

2 个答案:

答案 0 :(得分:2)

条件放在WHERE子句中的顺序根本不重要。重要的是你在桌上的索引。

对于此查询:

SELECT * 
FROM table 
WHERE random_field = 4684 
  AND primary_field = 355 
  AND date <= '2012-08-01' ;

好的索引可以是(random_field, primary_field, date)或:(primary_field, random_field, date)

为什么呢?因为具有相等条件的列(random_fieldprimary_field)首先放在索引中,然后放在具有范围条件的列(date)中。


名称primary_field相当奇怪。如果这确实是表的PRIMARY KEY(或者如果它具有UNIQUE约束 - 因此是唯一索引),那么这就是您需要为此查询所需的全部内容。这个(主要或唯一)索引与我建议的上述索引一样具有选择性。由于primary_field = @constant,条件最多会匹配一行,因此不需要额外的索引。

答案 1 :(得分:0)

我们应该遵循一些规则

1. comparison of primary fields should come first and then indexed (because this will filter out required value )
2. Date or range wise (example 2<id<6) should come at the end.