本文是关于mysql数据库索引,那么对于索引我们到底要学些什么呢?先来搞清楚以下几点:

  • 何为索引
  • 索引共有几种类型
  • 怎样创建索引
  • 索引设计有哪些基本原则

先建一张user表,结构如下:

mysql性能优化之一【索引--基础】_主键

何为索引

索引(在 MySQL 中也叫“键key”)是存储引擎快速找到记录的一种数据结构

——《高性能MySQL》

索引的本质其实就是一种数据结构,其功能是帮助我们快速匹配查找到我们需要的数据,同事也是数据库性能优化最常用的工具之一。

类似于字典,大家都知道使用字典查找你们想要的字的内容时,你只要知道这个字大发音或者能写出这个字,那么你就能很快查到该字的内容。

索引几大类型

使用SHOW INDEX FROM 表名称;查看索引详情

show index from user;

mysql性能优化之一【索引--基础】_全文索引_02

  1. 主键 PRIMARY KEY
    主键就是一种索引,并且是一种特殊的、唯一的、不允许有空值的所以。一般是在数据库表创建的时候创建。另外说明:同一张表里有且只能拥有一个主键。
  2. 唯一索引 UNIQUE
    唯一索引列说明该列中不能有重复的,但允许有空值。如果是组合索引,则列值的组合必须唯一。
    可以通过ALTER TABLE 表名称 ADD UNIQUE (列名称);创建唯一索引

mysql性能优化之一【索引--基础】_全文索引_03

  1. 可以通过ALTER TABLE 表名称 ADD UNIQUE (列A,列B);创建唯一组合索引

mysql性能优化之一【索引--基础】_主键_04

  1. 普通索引 INDEX
    最基本的索引,它没有任何限制。可以通过
    ALTER TABLE 表名称 ADD INDEX 索引名称(列名);创建普通索引

mysql性能优化之一【索引--基础】_表名_05

  1. 组合索引 INDEX
    组合索引,即一个索引包含多个列。多用于避免回表查询。可以通过ALTER TABLE 表名称ADD INDEX 索引名称(列A, 列B, 列C);创建组合索引

mysql性能优化之一【索引--基础】_主键_06

  1. 全文索引 FULLTEXT
    全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。
    可以通过ALTER TABLE 表名称ADD FULLTEXT (列);创建全文索引

mysql性能优化之一【索引--基础】_表名_07

索引一经创建不能修改,如果要修改索引,只能删除重建。可以使用DROP INDEX 索引名称 ON 表名称;删除索引。

索引设计的原则

  1. 适合索引的列是出现在where子句中的列,或者连接子句中指定的列
  2. 基数较小的类,索引效果较差,没有必要在此列建立索引
  3. 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
  4. 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。