做网站自己申请域名还是建站公司/太原网站推广公司
什么是索引?
索引:按照一定规则(排序)的数据结构设计,实现存储在空间的一批介质,这些东西可以提高寻找目标的速度,用来帮助数据库高效获取数据的数据结构。
索引的优化:数据库具有索引的数据结构,可以根据不同的情况,不同的查询条件等因素,对索引进行针对性的修改完成优化。
创建索引可以大大提高系统的系能。
索引的缺点
- 第一,通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。
- 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因
- 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
- 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
- 第五,通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统的性能
索引的缺点
增加索引有如此多的缺点,为什么不对表中的每一个字段都创建一个索引呢?这种想法很合理,但是太片面性。
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
- 索引需要占物理空间,除了数据占数据空间外,每一个索引还要占一定的物理空间,如果要建立聚簇索引。那么需要的空间就会更大
- 当对表中的数据进行增删改的时候,索引也要动态的维护,这样就降低了数据的维护速度
建议创建索引的列
- 在经常需要搜索的列上,可以加快搜索的速度
- 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
- 在经常用连接的列上,这些列主要是一些外键,可以加快连接的速度
- 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
- 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快查询时间。
- 在经常使用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))
主键索引
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中每个值都唯一。当在查询中使用主键索引时,它允许对数据的快速访问。
聚集索引
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。