有一个表foo
,它有user_id
和status
列以及其他列,user_id
和status
都已编入索引,例如
key idx_status (status)
key idx_user_id (user_id)
和count(distinct user_id)
超过count(distinct status)
。
现在我想执行一个sql,例如
select * from foo where status = '00' and user_id = 100000 ;
我的同事建议我将user_id
放在status
之前的sql条件中。他说如果是这样,sql将首先使用idx_user_id
然后使用idx_status
,显然性能会更好。
但是我不确定,我认为无论sql条件的顺序如何,mysql都会优化它。所以我认为条件的顺序可以任意。
哪个是对的? 顺便说一句,我解释了sqls并没有找到任何差异,两者都是:
id: 1
select_type: SIMPLE
table: foo
type: ref
possible_keys: idx_status,idx_userid
key: idx_userid
key_len: 123
ref: const
rows: 7
filtered: 100.00
Extra: Using index condition; Using where
答案 0 :(得分:2)
Mysql将重写查询以使用最具选择性的索引(在您的情况下为idx_userid)。您在EXPLAIN的结果中看到了这一点。
但是,对于查询,最好有一个复合(user_id,status)索引。