数据库学习--(索引相关)

什么是索引?

索引:按照一定规则(排序)的数据结构设计,实现存储在空间的一批介质,这些东西可以提高寻找目标的速度,用来帮助数据库高效获取数据的数据结构。

索引的优化:数据库具有索引的数据结构,可以根据不同的情况,不同的查询条件等因素,对索引进行针对性的修改完成优化。

创建索引可以大大提高系统的系能。

索引的缺点

  1. 第一,通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。
  2. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因
  3. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
  4. 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
  5. 第五,通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统的性能

索引的缺点
增加索引有如此多的缺点,为什么不对表中的每一个字段都创建一个索引呢?这种想法很合理,但是太片面性。

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  2. 索引需要占物理空间,除了数据占数据空间外,每一个索引还要占一定的物理空间,如果要建立聚簇索引。那么需要的空间就会更大
  3. 当对表中的数据进行增删改的时候,索引也要动态的维护,这样就降低了数据的维护速度

建议创建索引的列

  • 在经常需要搜索的列上,可以加快搜索的速度
  • 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
  • 在经常用连接的列上,这些列主要是一些外键,可以加快连接的速度
  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快查询时间。
  • 在经常使用where子句中的列上面才创建索引,加快条件的判断速度

不建议创建索引的列

  • 对于那些在查询中很少使用或者参考的列不应该创建索引。
    这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加索引,反而降低了系统的维护速度和增大了空间需求。

  • 对于那些只有很少数据值的列也不能增加索引。这是因为,由于这些列的取值很少,在查询的结果中,结果集的数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

  • 对于那些定义text,image和bit数据类型的列不应该增加索引,这是因为,那些数据量要么相当大,要么取值很少。

  • 当修改性能远远大于检索性能,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

索引的分类

普通索引

这是最基本的索引,它没有任何限制

创建索引的语法
创建表的时候指定索引

CREATE table t1(id int not null,username varchar(16) not null),index[indexName] (username(length));

创建索引

CREATE INDEX indexName ON t1(username(length))
如果是char、varchar类型,length 可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定length

修改表结构(添加索引)
ALTER table t1 ADD INDEX indexName(columnName)

删除索引的语法

DROP INDEX[indexName] ON table;

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

创建索引的语法
创建表的时候指定
CREATE TABLE mytable(UNIQUE [indexName])

CREATE TABLE t1(id INT NOT NULL PRIMARY KEY,
	username VARCHAR(16) NOT NULL,
	UNIQUE ii(username(5))
);

修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))

创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))

主键索引

数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中每个值都唯一。当在查询中使用主键索引时,它允许对数据的快速访问。

聚集索引

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

你可能感兴趣的:(数据库)