数据库高级特性(索引)
索引的概念:
索引是一种特殊的文件,他们包含着对数据表里面所有记录的引用指针,它是对数据库库表中一列或多列的值进行排序的一种结构。简单来说数据库索引就是一本书前面的目录,能够加快对数据库的查询速度,数据库索引就是为了提高表的搜索效率而对某些字段的值建立目录。
为什么要创建索引?
1:建立索引的目的就是加快对表中记录查找或排序,
2:创建索引可以大大提高系统性能
3:通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。
4:可以大大加快数据的检索速度,这也是创建索引的最主要的原因
5:可以加速表与表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
6:在使用分组和排序子句进行数据检索时,同样可以减少查询中分组和排序的时间
7:通过使用索引,可以在查询过程中,使用优化器,提高系统性能
索引的类型
普通索引:这是最基本的索引,他没有任何限制。索引分单列索引和多列索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引
他又以下几种创建方式
创建索引关键字:index
1:创建索引语法
create index 索引名 on 表名 (表中的列名)
查看索引语法show index from 表名
其他创建单列索引方法:
创建表时创建索引的语法
最后删除单行索引的语法
alter table 表名 index 索引名
多列索引:多列索引也称组合索引,即一个索引包括多个列,创建多列索引与创建单列索引方式几乎相同只是创建单列索引时括号致谢了一个列,创建多列索引,在括号中写入多个列,列于列之间用逗号隔开。
多列索引的使用规范:
1:如果使用多列索引,where条件字段的顺序非常重要,需要满足最左前缀列
最左前缀列:查询条件中的所有字段需要从最左边起按顺序出现在多列索引中,需要按照最左索引列查找,不能跳过中间列,查询条件的字段要小于等于多列索引字段数,中间字段不能出现范围查询字段(<,like等)这样的sql语句才能使用多列索引
唯一索引:它与前面的普通索引类似,不同就是:索引列的值必须是唯一,但允许源头空值,如果是组合索引,则列值的组合必须唯一。
创建唯一索引语法:
create unique index 索引名 on 表名 (列名)
主键索引:他是一种特殊的唯一的索引,不允许有空值。为表自定义主键将自动创建主键索引。主键索引是唯一索引的特定类型。该索引要求主键中的每一个值都唯一。
创建方法:
全文索引:这个索引不常用,所以不做多介绍
select 添加语句:
insert into 表名(列名列表) select 列名列表 from 表名
为什么不对表中每一个列创建一个索引?
因为增加索引也有许多不利的方面
1:创建索引和维护索引要耗费时间,这种时间是随着数据量的增加而增加的。
2:索引需要占用物理空间,出来数据表占用空间之外,每一个索引嗨哟占用一定的物理空间
3:当对表中的数据进行增加,删除,和修改的时候,索引也要动态的维护,这样降低了数据的维护速度
在这些列上创建索引或许用处较大:
1:在经常需要搜索的列上,可以加快搜索的速度。
2,在作为主键的列上。强制该列的唯一性和组织表中数据的排列结构
3:在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
4:在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围时连续的
5,在经常需要排序的列上创建索引,这样可以利用索引的排序,加快排序查询时间
6:在经常时用where子句的列上创建索引,加快条件的判断速度
不因该在这些列上创建索引:
1:对于那些在查询中很少使用或者参考的列不因该创建索引
2,对于那些只有很少数据值的列也不应该创建索引
3:对于那些为text,image,和bit数据类型的列不应该楚创建索引
4:当修改性能远远大于检索性能时,不应该创建索引。