数据库|详解索引

    xiaoxiao2023-11-07  141

    一、索引的概述

    是存储引擎用于快速找到数据记录的一种数据结构,可快速访问数据库表中的特定信息。(类似于书的目录的作用)实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

    二、索引的优点

    提高MySQL的检索速度。

    三、索引的缺点

    ①降低更新表的速度 如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。②占用磁盘空间的索引文件

    四、索引的类型

    普通索引(常规索引)----单列索引 一张数据表中可以有多个常规索引。如果没有明确指明索引的类型,我们所说的索引都是指常规索引。

    复合索引(组合索引) 复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。

    唯一索引 提供唯一性约束。一张表中可以有多个唯一索引。

    主键索引 也称为主键,提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:编号),主键的数据类型最好是数值。

    全文索引 提高全文搜索的查询效率。

    五、创建索引

    CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name[length])[asc|desc]

    unique|fulltext为可选参数,分别表示唯一索引、全文索引

    index和key为同义词,两者作用相同,用来指定创建索引

    col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择

    index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值

    length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度

    asc或desc指定升序或降序的索引值存储

    六、索引的创建

    1、普通索引

    a、直接法

    CREATE INDEX 索引名 ON 表名(username(length));

    注:如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。 b、修改表结构的方式添加索引

    ALTER TABLE 表名 ADD INDEX 索引名(col_name);

    c、创建表同时创建索引

    2、复合索引

    复合索引建立在多个字段上进行创建。

    a、直接法

    create index 索引名 on 表名(字段1,字段2,...);

    b、使用修改表结构的方式

    ALTER TABLE 表名 add index 索引名(字段1,字段2,...);

    3、唯一索引

    a、直接法

    # 单个 CREATE UNIQUE INDEX 索引名 ON table_name(col_name); # 多个 CREATE UNIQUE INDEX 索引名 on table_name(col_name1,col_name2...); # 注意单个、多个指的是字段

    b、修改表结构的方法

    # 单个 ALTER TABLE table_name ADD UNIQUE index index_name(col_name); # 多个 ALTER TABLE table_name ADD UNIQUE index index_name(col_name1,col_name2...); # 注意单个、多个指的是字段

    c、创建表的同时创建索引

    CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT , title varchar(255) NOT NULL , content varchar(255) NULL , PRIMARY KEY (`id`), UNIQUE index_name_unique(title) )

    4、主键索引

    a、创建表的同时创建索引

    CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT , title varchar(255) NOT NULL , content varchar(255) NULL , PRIMARY KEY (`id`) )

    b、创建表后再创建索引

    ALTER TABLE 表名 ADD primary key(col_name);

    c、使用ALTER增加主键 注:主键只能作用于一个列上,添加主键索引时,需要确保该主键默认不为空(NOT NULL) 例:

    ALTER TABLE testalter_tbl MODIFY i INT NOT NULL; ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

    5、全文索引

    a、直接法

    CREATE FULLTEXT INDEX 索引名 ON 表名(col_name);

    b、创建表的同时创建索引

    CREATE TABLE table ( id int(11) NOT NULL AUTO_INCREMENT , title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , PRIMARY KEY (`id`), FULLTEXT (content));

    c、修改表的结构

    ALTER TABLE 表名 ADD FULLTEXT 索引名(col_name);

    注: 默认 MySQL 不支持中文全文检索!

    6、添加索引时括号中的字段名可以多个

    七、索引的删除和查询

    1、删除索引
    DROP INDEX 索引名 ON 表名;

    或者

    ALTER TABLE 表名 DROP INDEX 索引名;
    2、查询索引
    show indexes from 表名;

    或者

    show keys from 表名;
    最新回复(0)