索引分类

Mysql 索引 - 图1
一般我们所说的加索引都是指 B-Tree 索引,全文索引会用搜索引擎之类的替代。

普通索引

单个索引

  1. 创建索引

    1. 直接创建索引, alter table jack_study.spring_study_user add index name(nickname);
    2. 创建表时添加索引,key index_name (column_name)

      复合索引

  2. 添加多列索引,alter table jack_study.spring_study_user add index name(nickname,first_name,last_name)

    最佳左前缀

    如果创建了(area, age, salary) 的复合索引,那么其实相当于创建了(area, age, salary) / (area, age) / (area) 三个索引,这被称为最佳左前缀。因此在创建复合索引时,应该将最常用的列放在最左边,然后依次类推。

    唯一索引

    一般人们使用唯一索引是为了避免出现重复数据,唯一索引的那列是唯一的不能重复的。

  3. 创建表时添加唯一索引

    1. create table `test_unique`(
    2. `id` int not null
    3. `name` varchar(64) not null comment '姓名',
    4. `num` int not null comment '学号',
    5. primary key (`id`),
    6. unique key (name,num)
    7. )
  4. 添加唯一索引

    1. alter table djs_user add unique key k_phone (`phone`);

主键

主键与唯一索引的区别

主键是逻辑上的,唯一索引是物理上的。主键是唯一的,唯一索引可以有多个。

查看索引

查看索引,show index from tableName

删除索引

删除索引,drop index indexName on tableName

建立索引的规则

  1. 表的外键、主键必须有索引
  2. 数据量超过300的表应该有索引
  3. 经常与其他表连接的表,应该在连接字段上建立索引
  4. 经常出现在 Where 子句的字段,特别是大表的字段,应该建索引
  5. 索引应该建在选择性高的字段上
  6. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建立索引
  7. 复合索引的建立需要仔细分析,尽量考虑用单字段索引代替:
    1. 一般复合索引的字段为3个左右
    2. 一般同时以 and 的方式出现在where子句中,并且单字段查询的情况很少,这种情况可以建复合索引
  8. 索引不会包含含有 null 值的列。复合索引中如果有一列含有null值,那么这列对于此复合索引就是无效的。所以在设计数据库时不要让字段的默认值为 null
  9. 不要在列上进行运算,select * from users where YEAR(adddate)
  10. 索引不是越多越好,因为索引也会占空间,而且进行更新操作的时候也会更新索引。如果索引过多,可能会引起性能下降。
  11. 每次 MySQL 只会执行一个索引,并且会试图选限制最严格的。

    key 与 index 的区别

    有区别,但是实际操作时可以当作是一回事。