什么是索引?
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。
索引原理
索引一般以文件形式存在磁盘中(也可以存于内存中),存储的索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索。
索引的优点
建立索引的目的是加快对表中记录的查找或排序!
1、建立索引的列可以保证行的唯一性,生成唯一的rowId
2、建立索引可以有效缩短数据的检索时间
3、建立索引可以加快表与表之间的连接
4、为用来排序或者是分组的字段添加索引可以加快分组和排序顺序
索引的缺点
1、创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大
2、创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)
3、会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长
数据库中表的数据量较大的情况下,对于查询响应时间不能满足业务需求,可以合理的使用索引提升查询效率。
基本索引类型
① 普通索引(单列索引)
② 复合索引(组合索引)
③ 唯一索引
④ 主键索引
⑤ 全文索引
创建语句
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指定升序或降序的索引值存储
索引的创建、查询和删除
普通索引(单列索引)
普通索引(单列索引):单列索引是最基本的索引,它没有任何限制。
直接创建索引
CREATE INDEX index_name ON table_name(col_name);
修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name(col_name);
创建表的时候同时创建索引
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` varchar(255) NOT NULL ,
`content` varchar(255) NULL ,
&#