欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力
对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
专栏:
- java全栈
- C&C++
- PythonAI
- PCB设计
文章概述:对mysql的 索引种类的介绍&优缺点&使用场景&对应的习题&常见问题的解答&注意点
关键词:Mysql 索引
本文目录:
索引优点:
索引缺点
什么时候需要创建索引
什么时候不需要创建索引
MySQL中的索引类型
普通索引
1.直接创建索引
2.修改表添加索引
3.创建表时指定索引列
4.删除索引
唯一索引
1.创建唯一索引
2.修改表添加唯一索引
3、创建表时指定唯一索引
主键索引
1.修改表添加主键索引
2.创建表时指定主键索引
组合索引(联合索引)
1.添加组合索引
2、创建表时创建组合索引
索引优点:
1.通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性;
2.可以加快数据的检索速度;
3.可以加速表与表之间的连接;
4.在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间;
索引缺点
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
2.索引需要占用物理空间,数据量越大,占用空间越大;
3.会降低表的增删改的效率,因为每次增删改索引都需要进行动态维护;
什么时候需要创建索引
1.频繁作为查询条件的字段应该创建索引;
2.查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找);
3.查询中统计或者分组的字段;
什么时候不需要创建索引
1.频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件;
2. where条件里用不到的字段,不创建索引;
3.表记录太少,不需要创建索引;
4.经常增删改的表;
5.数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引;
MySQL中的索引类型
1.普通索引:
最基本的索引,它没有任何限制。
2.唯一索引:
索引列的值必须唯一,但允许有空值,如果是组合索引,则列值的组合必须唯一。
3.主键索引:
特殊的索引,唯一的标识一条记录,不能为空,一般用primary key来约束。
4.联合索引:
在多个字段上建立索引,能够加速查询到速度。
-
普通索引
是最基本的索引,它没有任何限制。在创建索引时,可以指定索引长度。length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是BLOB和TEXT类型,必须指定length。
#查询索引
SHOW INDEX FROM table_name;
index同样是对象,用DDl语句主键列自动创建索引
1.直接创建索引
CREATE INDEXindex_nameON table(column(length) (可以不写));
#为emp3表中的name创建一个索引,索引名 emp3_name_index;
create index emp3_name_index ON emp3(name);
2.修改表添加索引
ALTER TABLE table_name ADD INDEXindex_name(column(length));
#修改emp3表,为addrees列添加索引,索引名为emp3_address_index;
alter table emp3 add index emp3_address_index(address);
3.创建表时指定索引列
CREATE TABLE`table`(
COLUMN TYPE ,
PRIMARY KEY(`id`),
INDEX index_name(column(length))
);
#创建emp4表,包含emp_id,name,address列, 同时为name列创建索引 ,索引名为emp4_name_index。
create table emp4
(emp_id intprimary key auto_increment,name
varchar(30),address varchar(50),index emp4_name_index(name)
);
4.删除索引
DROP INDEX indexnameONtablename;
#删除mep3表中索引名为emp3_address_index的索引。
drop index emp3_address_index on emp3;
-
唯一索引
唯一索引与普通索引类似,不同的就是: 索引列的值必须唯一,但允许有空值。
有唯一约束就有唯一索引
创建唯一索引的时候必须要保证该列中没有重复数据
1.创建唯一索引
CREATE UNIQUE INDEXindexNameON table(column(length));
#为emp表中的name创建一个唯一索引,索引名为emp_name_index。
create unique indexemp_name_indexonemp(name);
2.修改表添加唯一索引
ALTER TABLE table_name ADD UNIQUEindexName(column(length));
#修改emp表,为salary列添加唯一索引,索引名为emp_salary_index。
alter table emp add unique emp_salary_index(salary);
3、创建表时指定唯一索引
CREATE TABLE`table`(
COLUMNTYPE ,
PRIMARY KEY(`id`),
UNIQUEindex_name(column(length))
);
#创建emp5表,包含emp_id,name,address列,同时为name列创建唯一索引。索引名为emp5_name_index。
create table emp5(emp_id int primary key,name varchar(30),address
varchar(30),unique emp5_name_index(name));
-
主键索引
主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。(就是添加主键约束)
1.修改表添加主键索引
ALTER TABLE表名ADD PRIMARY KEY(列名);
#修改emp表为employee_id添加主键索引。
alter table emp add primary key(employee_id);
2.创建表时指定主键索引
CREATE TABLE`table`(
COLUMNTYPE ,
PRIMARY KEY(column)
);
#创建emp6表,包含emp_id,name,address列,同时为emp_id列创建主键索引
create table emp6(employee_id int primary key auto_increment,name
varchar(20),address varchar(50));
-
组合索引(联合索引)
组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)
最左前缀原则
就是最左优先。
如: 我们使用表中的name,address,salary创建组合索引,那么想要组合索引生效, 我们只能使用如下组合:
name/address/salary
name/address
name/
如果使用addrees/salary或者是salary则索引不会生效
1.添加组合索引
ALTER TABLE table_name ADD INDEXindex_name(column(length),column(length));
#修改emp6表,为name,address列创建组合索引
alter table emp6 add index emp6_index_n_a(name,address);
2、创建表时创建组合索引
CREATE TABLE`table`(COLUMN_name COLUMNTYPE ,COLUMN_name COLUMNTYPE ,
INDEXindex_name(column(length),column(length))
);
#创建emp7表,包含emp_id,name,address列,同时为name,address列创建组合索引。
create table emp7(emp_id int primary key auto_increment,name
varchar(20),address varchar(30),index emp7_index_n_a(name,address));