简述:
为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?
一、联合索引测试
注:Mysql版本为 5.7
创建测试表:
CREATE TABLE `jlyx_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_code` varchar(32) NOT NULL DEFAULT '' COMMENT '账户编号',
`user_name` varchar(32) DEFAULT '' COMMENT '账户名',
`password` varchar(64) DEFAULT '' COMMENT '密码',
`type` varchar(32) DEFAULT '2' COMMENT '1-管理员 2-运营人员 3-推广人员',
`real_name` varchar(32) DEFAULT '' COMMENT '姓名',
`phone` varchar(32) DEFAULT '' COMMENT '手机号',
`email` varchar(32) DEFAULT NULL COMMENT '邮箱',
`qq` varchar(32) DEFAULT NULL COMMENT 'QQ号',
`last_login_time` timestamp NULL DEFAULT NULL COMMENT '最后登录时间',
`deleted` tinyint(4) DEFAULT '1' COMMENT '0-删除 1-正常 2-禁用',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
KEY `index_lh` (`user_name`,`phone`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='后台用户表';
我们为user_name, phone, email三个字段添加上联合索引!
我们选择 explain 查看执行计划来观察索引利用情况:
1.查询条件为 user_name
EXPLAIN SELECT * FROM jlyx_user WHERE user_name = 'liujun'
可以通过key看到,联合索引有效
2.查询条件为 phone