前言
今天在办公室休息,随便翻开了有关于MySQL的书籍,正好翻到了有关于索引的知识点,所以想要记录并总结一下MySQL中有关于索引方面的知识点。
一、认识索引
查询记录是数据库应用中最常用的操作之一,而当数据库中表结构越来越复杂,数据量越来越多时,查询的效率就会在一定长度上降低,特别是分组查询或者联表查询。例如,一本书按照章节来进行排版,如果要直接从整本书中查询某个词语或者句子是很低效的,通常的做法是将章节编成录,然后按照目录来定位和查找某一个具体的内容。
索引与书的目录十分相似,建立索引可以提高从数据库表中检索数据的速度。
索引是对数据库中一列或多列的值进行排序的一种结构,使用索引可以提高数据库中特定数据的查询速度。
如果没有索引,MySQL必须从第一条数据开始读完整个表格,然后找到匹配的数据后返回结果;反之如果有了索引,MySQL能够快速的到达某个位置去搜寻数据,从而避免查看所有数据。
索引是一个单独的,存储在磁盘上的数据结构,他们包含着对数据表里所有记录的应用指针,对相关列使用索引是提高查询操作速度的最佳途径。
二、常见的索引有哪些
在MySQL中,通常所指的索引类型有以下几种:
- 普通索引。普通索引是MySQL中的基本索引类型,可以常规的提高查询效率。在一张表中可以有多个普通索引。普通索引也是使用最普遍的索引类型,如果没有明确的指明索引的类型,那么所说的索引都是普通索引。普通索引允许定义索引的列插入重复值和空值。
- 唯一索引。唯一索引可以提高查询效率,并提供唯一性的约束,即该列的值不允许重复。一张表中可以有多个唯一索引。
- 主键索引。主键索引也简称主键,是一种特殊的唯一索引。它可以提高查询的效率,并提供唯一性约束。
- 全文索引。全文索引可以提高全文搜索的查询效率,在定义索引的列上支持值的全文查找。全文索引可以在char、varchar、或者text类型的列上创建。在MySQL中只有MyISAM存储引擎支持全文索引。
- 组合索引。组合索引在创建时所关联的字段不是一个,而是多个字段的组合。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段的第一个字段时,多列索引才会被使用。
三、索引的使用方法
- 创建普通索引
创建普通索引的方式有三种,分别时在创建表的同时创建索引,在已有的表上创建索引和以修改表结构的方式来增加索引。
①、创建表的同时创建索引
语法:
create table table_name(
字段1 数据类型,
字段2 数据类型,
......
index [索引名]
)
例如:创建一个学生表,并为其中的name字段添加普通索引
②、在已有的表上创建索引
语法:
create index 索引名 on 表名(字段名)
例如:
③、以修改表结构的方式增加索引
语法:
alter table 表名 add index 索引名(字段名)
例如:
- 创建唯一索引
创建唯一索引的方式与普通索引的方式相同,都有3种方法。具体操作时只需要在普通索引关键字index前加unique即可,具体语法如下:
create table table_name(
字段1 数据类型,
字段2 数据类型,
....
unique index 索引名称(字段名)
)
例如:
- 删除索引
在MySQL中可以使用alter table或者drop index语句来实现删除索引的操作,具体语法如下:
#使用alter table删除索引
alter table table_name drop index index_name
#使用drop index删除索引
drop index index_name on table_name
四、索引的设计原则
索引本身的作用是用来提高数据的查询速度的,但并不是索引越多越好。相反索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍,因此设计索引时应当考虑以下几个准则:
- 索引并不是越多越好。索引不仅独立占用磁盘空间而且进行增加、删除、修改操作时也要对索引进行调整和更新。
- 避免对经常更新的表进行过多的索引,并且索引中的列尽可能的少。对于经常要查询的字段应该添加索引。
- 数据量比较小的表最好不要添加索引。
- 在不同的值很少的列上不要建立索引。
- 当唯一性是某种数据本身的特征时,指定唯一索引。
- 对频繁进行排序或者分组的列上建立索引