贴出 explain select * from t_access_token WHERE state = 0 AND account = '账号,每条sql值都不一样' AND token <> '令牌,每条sql值都不一样';的结果以供分析。
1.看一下存储引擎是否为myisam。如果是myisam则改为innodb。 show create table t_access_token; 如果是myisam则修改为innodb: alter table t_access_token engine=innodb; 2.看一下执行计划,并贴出结果。 explain select * from t_access_token where state=0 and account='xxx' and token <> 'xxx';
谢谢回答,表是Innodb引擎 结果如下id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t_access_token index_merge idx_accesstoken_token,idx_accesstoken_state,idx_accesstoken_account idx_accesstoken_state,idx_accesstoken_account 4,66 523 Using intersect(idx_accesstoken_state,idx_accesstoken_account); Using where
索引没有创建。 create index sss on t_access_token(state,account,token);
个人意见:如果索引这样建立,猜测表中state字段=0的数据应该占表中总数据大于10% 所以我认为可以create index sss on t_access_token(account,token,state); 楼主可以随意变换下位置测试下。 谢谢
个人意见:如果索引这样建立,猜测表中state字段=0的数据应该占表中总数据大于10% 所以我认为可以create index sss on t_access_token(account,token,state); 楼主可以随意变换下位置测试下。 谢谢 好的,我明天合起来测下
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
有的,where的三个字段都分别加上了索引 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
有的,where的三个字段都分别加上了索引 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 明白了,但是像我这条需要过滤的语句,如果不用<>,要怎么写
有的,where的三个字段都分别加上了索引 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 明白了,但是像我这条需要过滤的语句,如果不用<>,要怎么写 看看把前两者建立一个索引,最后哪个单独建一个索引。这个不敢肯定呀。
AND account = '账号,每条sql值都不一样'
AND token <> '令牌,每条sql值都不一样';的结果以供分析。
show create table t_access_token;
如果是myisam则修改为innodb: alter table t_access_token engine=innodb;
2.看一下执行计划,并贴出结果。
explain select * from t_access_token where state=0 and account='xxx' and token <> 'xxx';
谢谢回答,表是Innodb引擎
结果如下id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t_access_token index_merge idx_accesstoken_token,idx_accesstoken_state,idx_accesstoken_account idx_accesstoken_state,idx_accesstoken_account 4,66 523 Using intersect(idx_accesstoken_state,idx_accesstoken_account); Using where
create index sss on t_access_token(state,account,token);
所以我认为可以create index sss on t_access_token(account,token,state);
楼主可以随意变换下位置测试下。
谢谢
所以我认为可以create index sss on t_access_token(account,token,state);
楼主可以随意变换下位置测试下。
谢谢
好的,我明天合起来测下
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
有的,where的三个字段都分别加上了索引
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
有的,where的三个字段都分别加上了索引
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 明白了,但是像我这条需要过滤的语句,如果不用<>,要怎么写
有的,where的三个字段都分别加上了索引
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 明白了,但是像我这条需要过滤的语句,如果不用<>,要怎么写
看看把前两者建立一个索引,最后哪个单独建一个索引。这个不敢肯定呀。