索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATEDELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。

普通索引

  1. 创建索引

    1. -- 如果是CHARVARCHAR类型,length可以小于字段实际长度;
    2. -- 如果是BLOBTEXT类型,必须指定 length.
    3. CREATE INDEX index_name ON tab_name (col_name);
  2. 通过ALTER添加索引

    1. ALTER table tab_name ADD INDEX index_name (col_name)
  3. 创建表的指定索引

    1. CREATE TABLE mytable(
    2. id INT NOT NULL,
    3. username VARCHAR(16) NOT NULL,
    4. INDEX [index_name] (user_name(length))
    5. );
  4. 删除索引

    1. DROP INDEX [index_name] ON tab_name;

唯一索引

与普通索引类似,不同的是索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。有以下创建方式:

  1. 创建索引

    1. CREATE UNIQUE INDEX index_name ON tab_name(col_name(length));
  2. 通过ALTER添加索引

    1. ALTER table tab_name ADD UNIQUE [index_name] (col_name(length))
  3. 创建表的时候直接指定

    1. CREATE TABLE mytable(
    2. id INT NOT NULL,
    3. username VARCHAR(16) NOT NULL,
    4. UNIQUE [index_name] (username(length))
    5. );

    使用ALTER命令添加和删除索引

    ```sql — 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 ALTER TABLE tab_name ADD PRIMARY KEY (column_list); — 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。 ALTER TABLE tab_name ADD UNIQUE index_name (column_list); — 添加普通索引,索引值可出现多次。 ALTER TABLE tab_name ADD INDEX index_name (column_list); — 该语句指定了索引为 FULLTEXT ,用于全文索引。 ALTER TABLE tab_name ADD FULLTEXT index_name (column_list);

— 使用 ALTER 命令添加和删除主键 — 主键作用于列上(可以一个列或多个列联合主键),添加主键索引时,需要确保该主键默认不为空(NOT NULL)
ALTER TABLE tab_name MODIFY col_name INT NOT NULL;
ALTER TABLE tab_name ADD PRIMARY KEY (col_name ); — 删除主键时只需指定PRIMARY KEY,但在删除索引时,必须知道索引名。 ALTER TABLE tab_name DROP PRIMARY KEY; — 显示索引信息 SHOW INDEX FROM tab_name; ```