索引
索引有两个主要功能:约束,加速查找
索引为什么可以加速查找? B-tree
搜索数据库给创建索引的列创建一个文件 ,将该列中的数据标定一个唯一的数字,然后在文件中将数据按照二叉树的形式排列,再查询时,直接在二叉树中搜索数字,简化搜索的次数,通过该数字可以直接在数据库中查找到查询的数据
索引的种类
索引分为:
普通索引
唯一索引
主键索引
联合索引
普通索引:
只有加速查找的功能
1,在创建表时创建索引
create table 表名( 列名 varchar(12) not null; index 索引名(列名); )
2,创建空表后添加索引
create index 索引名 on 表名(列名);
3,删除索引
drop index 索引名 on 表名
4,查看索引
show index from 表名;
唯一索引:
唯一索引是普通索引的特殊形式
能够加速查找,同时也能约束添加索引的列数据不能重复,数据可以为Null
1,在创建表时创建唯一索引
create table 表名( 列名 varchar(12) not null; unique 索引名(列名); )
2,创建空表后添加唯一索引
create unique index 索引名 on 表名(列名);
主键索引:
主键(primary key),在创建后就被当作是一个索引文件
加速查找,同时也能约束添加索引的列数据不能重复,但是数据不能为Null
创建方式就是创建一个主键
组合索引:
联合唯一:加速查找,同时也能约束添加索引的列数据不能重复
组合索引中查找数据时,按照最左索引,定义时最左边的列可以直接使用索引查找,非最左边的数据库查找
在创建普通索引和唯一索引时,在表名()的括号中多写几个列名,就能将这些列名创建组合索引
如:
普通组合索引index 索引名(列名,列名,列名。。。); 这些组合索引的值可以重复 组合唯一索引 unique 索引名(列名,列名,列名。。。) 这些索引的值不能重复,因此又被称为联合唯一
创建索引后,数据的查询分为两步
1,先去索引表中查找字符代表的数字
2,区数据表中查找数字
组合索引查找数据按照最左索引,小技巧还可以用来在用户登录时,系统不会涉及查找用户名,就可以在用户表中将name写在psd前,然后将两列创建一个组合索引即可,不需要创建两个单独的索引浪费内存
利用索引查询数据:
覆盖索引:
只需要在索引表中就能获取的数据(应用索引,不用去数据表中获取数据,想要获取的数据在已经建立的索引列里)
如对表teacher 的tname建立索引索引,获取时也只获取tname列的数据,条件也是tname索引
select tname from teacher where tname>100
合并索引
两个以上的索引合并起来作为条件搜索数据
如 student表中有 sid name age num 这几个列,对列name和num建立单独索引
查询时的条件就是这两个已经建立索引的列
select * from student where name='dd' and num='23';

浙公网安备 33010602011771号