表的索引
1、索引
目的:提高检索速度
原理:在操作系统高层次使用 二分思想 和 Binary Tree 来维护这个索引
特点:索引不用加内存,不用改程序,不用调sql,只要执行正确的create index,就可以提高查询速度。
索引占用磁盘空间,是以增加大量的IO操作来提高检索速度,空间换时间
添加一条记录不仅要在表中添加,还要维护二叉树
一个索引不能解决全部的检索问题,需要分别给字段建立索引
2、主键索引-PRI,
特点:不能为空;不能重复;一张表最多只能有一个主键;一般主键所在列通常是整数类型
建立:在字段名后添加索引、
在表的定义最后,指定列为索引
创建表以后,使用 alter 在表中添加索引
特殊的主键:复合主键
3、唯一键索引-UNI,
特点:不能重复;可以为空;一张表可以建立多个唯一键;
建立:在字段名后添加索引、
在表的定义最后,指定列为索引
创建表以后,使用 alter 在表中添加索引
4、普通索引-MUL
建立:(一般不指定索引名,则索引名与列名一致)
- --在表的定义最后,指定某列为索引
- alter table student add index(name);--创建完表以后指定某列为普通索引
- create index idx_name on student(name);--创建一个索引名为 idx_name 的索引
特点:一个表可以由多个普通索引
普通索引可以由重复数据
5、全文索引-FULLTEXT,只支持英文
当对文章字段或有大量文字的字段进行检索时,会使用到全文索引
支持全文索引的引擎:MyISAM
建立:在字段名后添加索引、
在表的定义最后,指定列为索引
创建表以后,使用 alter 在表中添加索引
特点:
全文索引的使用:select * from table where match(COL1, COL2...) against ('string');
6、索引相关
- 查看索引名:
- show keys from table;
- show index from 表名;
- desc 表名;
- 用explain工具看一下,是否使用到索引
explain + 查询语句;
- 删除索引
删除主键索引:alter table 表名 drop primary key;
其他索引的删除: alter table 表名 drop index 索引名;
drop index 索引名 on 表名
- 索引创建原则:
- 比较频繁作为查询条件的字段应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合作创建索引
- 不会出现在where子句中的字段不该创建索引