一、索引的概念
- 数据库索引
- 是一个排序的列表,存储着索引值和这个值所对应的物理地址
- 无须对整个表进行扫描,通过物理地址就可以找到所需数据
- 是表中一列或者若干列值排序的方法
- 需要额外的磁盘空间
二、索引的作用
- 数据库利用各种快速定为技术,能够大大加快查询速率
- 当表很大或查询涉及到多个表时,可以成千上万倍地提高查询速度
- 可以降低数据库的IO成本,并且还可以降低数据库的排序成本
- 通过创建唯一索引保证数据表数据的唯一性
- 可以加快表与表之间的连接
- 在使用分组和排序时,可大大减少分组和排序时间
三、索引的分类
3.1 普通索引
- 最基本的索引类型,没有唯一性之类的限制
- 创建普通索引的方式
方法一:mysql> create index abc on test(id);
方法二:mysql> alter table test add index abc(id);
方法三:在建表时创建索引
mysql> create table test(...index abc(id));
3.2 唯一索引
-
与“普通索引”基本相同
-
与普通索引的区别是索引列的所有值只能出现一次,即必须唯一
-
创建唯一索引的方式
方法一:mysql> create unique index bcd on test (name);
方法二:mysql> alter table test add unique aaa(id);
方法三:在建表时就创建索引
mysql> create table test(...unqiue index abc(id));
3.3 主键索引
- 是一种特殊的唯一索引,指定为“PRIMARY KEY”
- 一个表只能有一个主键,不允许有空值
- 创建主键索引的方式
mysql> create table test01(id int(3) not null,name varchar(10),primary key(id));
3.4 组合索引(单列索引与多列索引)
- 可以是单列上创建的索引,也可以是在多列上创建索引
- 最左原则,从左往右依次执行
- 创建组合索引的方式
mysql> create table test03(id int(3),name varchar(10),age int(2),index test(id,name));
3.5 全文索引
- MySQL从3.23.23版本开始支持全文索引和全文检索
- 索引类型为FULLTEXT
- 可以在CHAR\VARCHAR或者TEXT类型的列上创建
mysql> alter table test01 add fulltext index abc(address);
- 查看索引
语法:方法一:SHOW INDEX FROM TABLE_NAME;
方法二:SHOW KEYS FROM TTABLE_NAME;
例:show index from test;
show keys from test;
- 删除索引
语法:DROP INDEX INDEX_NAME ON TABLE_NAME;
ALTER TABLE TABLE_NAME DROP INDEX INXEX-NAME;
例:drop index abc on test;
alter table test drop index abc;
alter table test01 drop primary key; ## 删除主键索引
3.6 创建索引的原则依据
- 表的主键、外键必须有索引
- 记录数超过300行的表应该有索引
- 经常与其他表进行连接的表,在连接字段上应该建立索引
- 唯一性太差的字段不适合建立索引
- 更新太频繁的字段不适合创建索引
- 经常出现在where子句中的字段,特别是大表的字段,应该建立索引
- 索引应该建在选择性高的字段上
- 索引应该键在小字段上,对于大的文本字段甚至超长字段,不要建索引