是否有任何查询规则说明哪个更好首先过滤以获得最佳性能?例如:
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查询指南吗?
答案 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_field
,primary_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.