新建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`uname` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '昵称',
`phone` char(11) NOT NULL DEFAULT '' COMMENT '电话',
`emp_no` varchar(20) NOT NULL DEFAULT '' COMMENT '员工编号',
`dept_id` int(4) NOT NULL DEFAULT '0' COMMENT '部门id',
`pwd` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
`avt` varchar(255) NOT NULL DEFAULT '' COMMENT '头像',
`addr` varchar(255) NOT NULL DEFAULT '' COMMENT '地址',
PRIMARY KEY (`id`),
KEY `index_user` (`dept_id`,`uname`,`phone`) USING BTREE,
KEY `avt` (`avt`),
KEY `emp_no` (`emp_no`),
KEY `index_nickname` (`nickname`,`pwd`) USING BTREE,
KEY `addr` (`addr`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
最左原则
1
2
3
4
5
6
7
8
| SELECT
*
FROM
`user`
WHERE
uname = '5f686bb79ff03'
AND dept_id = 91
AND phone = '14097548200';
|
- where子句中,只能按照索引字段,从右向左依次截取字段,剩下的字段依次作为有效索引
1
| KEY `index_user` (`dept_id`,`uname`,`phone`) USING BTREE
|
可以直接用的有效索引有:(dept_id
,uname
,phone
),(dept_id
,uname
),(dept_id
)
(dept_id
,phone
)中phone
是走不上索引的,但是当满足MySQL的索引下推条件时,是可以减少回表次数,从而减少查询时间的。