在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应行的位置,从而快速地找到数据。

索引分类

mysql的索引分为:

普通索引(index)

唯一性索引(unique)

主键(primary key)

哈希索引(HASH)

全文索引(fulltext)

语句:

  1. CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
  2. [索引类型]
  3. ON 表名 (索引列,....)
  4. [索引选项]...
  5. //索引列:
  6. 列名[(长度)] [ASC | DESC ]
  7. #UNIQUE表示创建的是唯一性索引;FULLTEXT表示创建全文索引;SPATIAL表示为空间索引,可以用来索引几何数据类型的列
  8. #索引名:索引在一个表中名称必须是唯一的。
  9. #索引类型:部分储存引擎允许在创建索引时指定索引的类型。MySQL支持的索引类型有 B-TREE 和HASH
  10. #索引列:指定索引列,长度表示使用列的前面长度个字符创建索引,这可使索引文件大大减少,节省磁盘空间

索引的通用方法

#查看索引
show index from table_name;

#删除索引
drop index index_name on table_name;

普通索引方法

–直接创建索引(length表示使用名称前1ength个字符)
CREATE INDEX index_name ON table_name(column_name(length))

–修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column_name)

–创建表的时候同时创建索引
CREATE TABLE table_name (
id int(11) NOT NULL AUTO_INCREMENT ,
title char(255) NOT NULL ,
PRIMARY KEY (id),
INDEX index_name (title)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;  

建立复合索引 。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
  注意命名时的习惯了吗?使用“表名字段1名字段2名”的方式

例子

create index xh_xs on xs(学号(5) asc);
//创建普通索引

Query OK, 0 rows affected (1.15 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> show index from xs; //显示索引
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| xs    |          0 | PRIMARY  |            1 | 学号        | A         |           5 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| xs    |          1 | xh_xs    |            1 | 学号        | A         |           4 |        5 |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
2 rows in set (0.12 sec)

建表时创建索引

use test;
create table xs_kc
(
  学号     char(6) not null,
  课程号   char(3) not null,
  成绩     tinyint(1),
  学分      tinyint(1),
  primary key(学号,课程号),
  index cj(成绩)
);
SHOW INDEX FROM xs_kc;

创建和删除索引

1.CREATE INDEX创建

2.ALTER TABLE语句创建

ALTER [IGNORE] TABLE 表名
...
| ADD {INDEX|KEY}[索引名]
        [索引类型](索引列,...)[索引选项]...   #添加索引
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [索引类型](索引列,...)[索引选项]...   #添加主键 constraint 语句
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [索引名]
        [索引类型](索引列,...)[index_option] ...  #添加唯一性约束 UNIQUE
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [索引名]
        (索引列,...)[referenncce_definition]    #添加外键
  • CONSTRAINT [symbol] : symbol 为 主键|UNIQUE键|外键 的名字

3.删除索引

索引的利弊

**利**:加快了查找的速度

**弊**:过多的索引会造成空间浪费以及表的增删改会变麻烦