文章目录
索引介绍
索引是一种数据结构,创建在表上的,是对数据库表中的一行或者是多列的值进行排序的一种结果,使用索引可以提高查询速度,避免全表扫描
优点:提高查询效率,避免全表扫描
缺点:并非越多越好,过多的索引会导致CPU的使用率居高不小
索引分类:
普通索引:没有任何限制条件,可以给任何类型的字段创建普通索引
唯一性索引:使用unique修饰的字段,值是不能重复,主键索引隶属于唯一性索引
主键索引:使用primary key修饰的字段会自动创建索引
单列索引:在一个字段上创建索引
多列索引:在表中多个字段上创建索引
全文索引:使用fulltext参数设置全文索引,只支持char\varchar和text类型的字段上,常用于数据量较大的字符串类型上,可以提高查询速度,只有在MyISAM存储引擎支持
聚集性索引:在InNoDB引擎下建立的索引,将索引及数据存放在一起
非聚集性索引:在MyISAM引擎下建立的索引,将索引和数据分开存储在不同的文件中
索引SQL
1、在创建表时创建索引
create table 表名(
属性名 属性类型 [完整性约束],
...,
属性名 属性类型 [完整性约束]
[unqiue|fulltext|spatial] index|key [别名] 属性名 (asc,desc)
);
unqiue|fulltext|spatial都是可选参数
unqiue表示是唯一性索引
fulltext表示索引为全文索引
spatial表示索引为空间索引
index|key参数值需要创建索引的属性的名称,属性必须是已经存在的,如果不存在,需要先创建
别名:可以给自己所创建的属性起一个别名,可以是任意的字段
asc|desc是可选参数,asc:表示升序排列 ,desc:表示降序排列
创建普通索引:
mysql> create table index1(
-> id int,
-> name varchar(20),
-> sex varchar(2),
-> index (name)
-> );
Query OK, 0 rows affected (0.04 sec)
创建唯一性索引:
mysql> create table index2(
-> id int,
-> name varchar(20),
-> sex varchar(2),
-> unique index idx_id(id)
-> );
Query OK, 0 rows affected (0.04 sec)
2、在已经存在的表上创建索引
第一种:通过create语法创建索引
create [unqiue|fulltext|spatial] index 索引名 on 表名 (属性[asc|desc])
示例SQL:
create index idx_id on index1(id);
第二种:通过alter语法创建
alter table 表名 add [unqiue|fulltext|spatial]
index 索引名(属性名 [asc|desc])
alter table index2 add index idx_sex(sex);
3、删除索引
drop index 索引名 on 表名;
drop index idx_sex on index2;
索引执行过程
查询student为例演示索引执行过程:
mysql> show create table student;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`SID` int(10) DEFAULT NULL,
`Sname` varchar(