索引是什么
数据库索引是一种提高数据库系统性能的方法。索引能让数据库服务器更快地查找和获取表中指定的行。
例如,为了方便读者快速查找书中的术语,很多书籍在最后附加了索引页,术语按字母排序,同时给出页码。这样读者可以根据术语名,快速获取页码,而不用翻阅整本书。
但是索引也给数据库系统带来了一定的开销,所以我们应该谨慎地使用它们。
索引的分类
索引大体可分为单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引四类。本实训我们主要介绍单例索引和组合索引:
-
单例索引:一个索引只包含单个列,但一个表中可以有多个单列索引;
- 普通索引:仅加速查询 最基本的索引,没有任何限制,是我们大多数情况下使用到的索引;
- 唯一索引:索引列中的值必须是唯一的,但允许为空值;
- 主键索引:是一种特殊的唯一索引,不允许有空值。
-
组合索引:在表的多个字段上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。
索引的创建和删除
创建索引
创建索引有两种方式,一种是在建表时创建,另一种是建表后创建:
- 普通索引:
-
创表时创建普通索引:
CREATE table mytable(
id INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username)
);
-
建表后创建普通索引:
create INDEX 索引名称 on 表名(字段名 desc/asc);
#或者
ALTER TABLE 表名 ADD INDEX 索引名称 (字段名);
asc 代表升序索引,desc 代表降序,mysql 默认升序索引。
-
唯一索引:
CREATE UNIQUE INDEX 索引名称 ON 表名(字段名);
#或者
ALTER TABLE 表名 ADD UNIQUE (字段名);
-
主键索引:主键索引一般在建表时创建,会设为
int
而且是AUTO_INCREMENT
自增类型的,例如一般表的id
字段。CREATE TABLE mytable (
id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
-
组合索引:组合索引就是在多个字段上创建一个索引。(应用场景:当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度)
CREATE INDEX 索引名称 ON 表名(字段1,字段2,字段3);
#或者
ALTER TABLE 表名 ADD INDEX 索引名称(字段1,字段2,字段3);
查询表中索引
查询索引 SQL
:
show index from 表名;