索引分类

一般我们所说的加索引都是指 B-Tree 索引,全文索引会用搜索引擎之类的替代。
普通索引
单个索引
创建索引
添加多列索引,
alter table jack_study.spring_study_user add index name(nickname,first_name,last_name)最佳左前缀
如果创建了(area, age, salary) 的复合索引,那么其实相当于创建了(area, age, salary) / (area, age) / (area) 三个索引,这被称为最佳左前缀。因此在创建复合索引时,应该将最常用的列放在最左边,然后依次类推。
唯一索引
一般人们使用唯一索引是为了避免出现重复数据,唯一索引的那列是唯一的不能重复的。
创建表时添加唯一索引
create table `test_unique`(`id` int not null,`name` varchar(64) not null comment '姓名',`num` int not null comment '学号',primary key (`id`),unique key (name,num))
添加唯一索引
alter table djs_user add unique key k_phone (`phone`);
主键
主键与唯一索引的区别
主键是逻辑上的,唯一索引是物理上的。主键是唯一的,唯一索引可以有多个。
查看索引
查看索引,show index from tableName
删除索引
删除索引,drop index indexName on tableName
建立索引的规则
- 表的外键、主键必须有索引
- 数据量超过300的表应该有索引
- 经常与其他表连接的表,应该在连接字段上建立索引
- 经常出现在 Where 子句的字段,特别是大表的字段,应该建索引
- 索引应该建在选择性高的字段上
- 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建立索引
- 复合索引的建立需要仔细分析,尽量考虑用单字段索引代替:
- 一般复合索引的字段为3个左右
- 一般同时以 and 的方式出现在where子句中,并且单字段查询的情况很少,这种情况可以建复合索引
- 索引不会包含含有 null 值的列。复合索引中如果有一列含有null值,那么这列对于此复合索引就是无效的。所以在设计数据库时不要让字段的默认值为 null
- 不要在列上进行运算,
select * from users where YEAR(adddate) - 索引不是越多越好,因为索引也会占空间,而且进行更新操作的时候也会更新索引。如果索引过多,可能会引起性能下降。
- 每次 MySQL 只会执行一个索引,并且会试图选限制最严格的。
key 与 index 的区别
有区别,但是实际操作时可以当作是一回事。
