MySQL的类型主要有五种:主键索引、唯一索引、普通索引、空间索引、全文索引
有表:
CREATE TABLE `t1` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`u1` int unsigned NOT NULL DEFAULT '0',
`u2` int unsigned NOT NULL DEFAULT '0',
`u3` varchar(20) NOT NULL DEFAULT '',
`u4` varchar(35) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB
主键索引:
# 查看创建的索引关键词 PRIMARY KEY (`id`)
唯一索引;
# 创建唯一索引 mysql> alter table t1 add unique idx_u1(`u1`); # 查看创建的索引关键词 UNIQUE KEY `idx_u1` (`u1`)
单列索引
即索引创建在单个列上
# 创建单列索引 mysql> alter table t1 add index idx_u1(`u1`); # 查看创建的索引关键词 KEY `idx_u1` (`u1`)
多列索引
创建多列索引时记得遵循最左匹配原则,把区分度较高的字段放前面
# 创建多列索引 mysql> alter table t1 add index idx_u1_u2(`u1`,`u2`); # 查看创建的多列索引关键词 KEY `idx_u1_u2` (`u1`,`u2`)
前缀索引
即当字段的长度超过索引限制,可以为字段的部分前缀创建索引
# 创建前缀索引,取字符串的前4个字符 mysql> alter table t1 add index idx_u3(`u3`(4)); # 查看创建的索引关键词 KEY `idx_u3` (`u3`(4))
倒序索引
8.0 版本出的新功能,以往创建倒叙索引可以创建成功,但实际上仍然是顺序的
# 5.7 创建倒序索引 mysql> select u1 from t1 limit 10; +----+ | u1 | +----+ | 12 | | 23 | | 12 | | 34 | +----+ 10 rows in set (0.00 sec) # 创建倒序索引 mysql> alter table t1 add index idx_u3(u3 desc); # 实际查出来还是顺序 mysql> select u1 from t1 limit 10; +----+ | u1 | +----+ | 12 | | 12 | | 12 | | 12 | +----+ # 8.0 创建倒序索引 mysql> select u1 from t1 limit 5; +----+ | u1 | +----+ | 12 | | 23 | | 12 | | 34 | +----+ 5 rows in set (0.00 sec) # 添加索引 mysql> alter table t1 add index idx_u1(u1 desc); # 查询倒序索引成功 mysql> select u1 from t1 limit 5; +----+ | u1 | +----+ | 74 | | 74 | | 74 | | 74 | +----+ 5 rows in set (0.00 sec)