create table study_demo.transaction_demo
(
id int auto_increment comment 'id'
primary key,
user_name varchar(20) collate utf8_unicode_ci not null,
user_id int default 0 not null,
info int default 0 not null comment 'info',
info2 int default 0 not null comment 'info2'
)comment '事务demo' charset=utf8;
create index transaction__user_info_demo__index
on study_demo.transaction_demo (user_id, info2, user_name);
执行计划:
explain select * from transaction_demo
where user_id = 2 and info2 > 1 and user_name like 'demo%';
key:transaction__user_info_demo__index
key_len:8
推算出命中了user_id
,info2
字段
执行计划:
explain select * from transaction_demo
where user_id = 2 and info2 >= 1 and user_name like 'demo%';
key:transaction__user_info_demo__index
key_len:70
推算出命中了user_id
,info2
,user_name
字段
个人理解,条件判断大于等于,
MySQL
直接定位到索引节点上,该节点和之后的节点都符合条件;如果条件判断是大于,还需要移动指针,不利于索引使用对于
int
类型,如果条件>x
,建议改成>=x+1