MySQL索引概述

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

MySQL索引概述
索引的优点:
1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
2.可以加快数据的检索速度。
索引缺点:
1.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
2.索引需要占据物理空间。

索引的类型:
1.INDEX:普通索引
2.PRIMARY KEY:主键
3.UNIQUE:唯一索引
4.FOREIGN KEY:外键
5.FULLTEXT:群文索引

1.INDEX:普通索引
1.1一个表中可以有多个INDEX字段。
1.2字段的值允许有重复,且可以赋NULL值。
1.3经常把做查询条件的字段设置为INDEX字段。
1.4INDEX字段的KEY标志是MUL。

insert into 库名.表名 values(值列表); #插入表记录
select * from 库名.表名; 查看表的所有记录

例:建表的时候指定索引字段
-INDEX(字段1),INDEX(字段2)...
mysql>create database ku;
mysql>create table ku.abc(
>id    int(2) not null,
>name  varchar(4)  not null,
>age   int(3)  not null,
>index(name),index(age)               
>);

mysql>desc ku.abc;
Field  Type  Null  Key   Default   Extra
..   ..     ..      MUL    ..     ..

mysql>insert into ku.abc values(1,"wang",23);
mysql>select * from ku.abc;

在已有创建的表中设置INDEX字段
格式:create index 索引名 on 库名.表名(字段);

删除指定表的索引字段
格式:drop index 索引名 on 库名.表名;

例:
mysql>create index  xixi on ku.abc(id);
mysql>drop  index  xixi on ku.abc;

查看表的索引信息
格式:show index from 库名.表名;

例:
mysql>show index from ku.abc\G;
......
Index_type: BTREE(默认使用B树算法)
......

默认使用的索引类型:BTREE(二叉树) hash B+Tree

2.PRIMARY KEY:主键
2.1一个表中只能有一个primary key字段
2.2对应字段的值不允许有重复,且不允许赋NULL值。
2.3如果有多个字段都作为primary key,称为复合主键,必须一起创建。
2.4主键字段的KEY标志是PRI。
2.5通常与AUTO_INCREMENT连用。
2.6经常把表中能够唯一标示记录的字段设置为主键字段。(如记录编号字段)

注释:
主键与auto_increment 连用
字段值自动增长 +1
主键 并且 数值类型

例:建表的时候指定主键字段
-PRIMARY KEY(字段名)
mysql>create table ku.abc2(
>id  int(3)  auto increment,
>name  varchar(5)  not null,
>age   int(2)  not null,
>primary key(id)
>);

mysql>desc ku.abc2;
 Field  Type  Null  Key  Default    Extra
..    ..    ..     PRI     ..      ..

mysql>insert into ku.abc2 values(2,"wang",23);
mysql>select * from ku.abc2;

在已创建的表中设置PRIMARY KEY字段
格式:alter table 库名.表名 ADD PRIMARY KEY(字段名);

删除指定表的PRIMARY KEY字段
格式:alter table 库名.表名 DROP PRIMARY KRY;
注意:如果有自增属性(AUTO_INCREMENT),必须先删除。

例:
mysql>alter tabel ku.abc2  drop primary key;
mysql>alter table ku.abc2 add primary key(id);

3.UNIQUE:唯一索引
3.1一个表中可以有多个UNIQUE字段。
3.2对应字段的值不允许有重复。
3.3UNIQUE字段的KEY标志是UNI。
3.4UNIQUE字段的值允许为NULL,当将其修改为不允许为NULL时,则此字段限制于主键相同,KEY会变为PRI。

例:建表的时候指定UNIQUE字段
-UNIQUE(字段1),UNIQUE(字段2)...
mysql>create table ku.abc3(
>id char(6),
>name  varchar(4)  not null,
>age int(3)  not null,
>unique(id),unique(name),unique(age)
>);

mysql>desc ku.abc3;
Field   Type    Null      Key    Default   Extra
..     ..    YES    UNI     ..      ..

mysql>insert into ku.abc3 values(3,"wang",23);
mysql>insert into ku.abc values(4,"lisi",23);
mysql>select * from ku.abc3;

在已创建的表中设置UNIQUE字段
格式:create unique index unique字段名 on 库名.表名(字段名);

删除指定表的UNIQUE字段
格式:drop index unique字段名 on 库名.表名(字段名);

例:
mysql>drop  index name on  ku.abc3; #于删除INDEX索引的方法相同。
mysql>create unique  index name on ku.abc3(age);

4.FOREIGN KEY:外键
4.1让当前表字段的值在另一个表字段的值中的范围内选择。

外键的使用条件:
1.表的存储引擎必须是innodb。
2.两表的字段类型要一致。
3.被参照字段必须要是主键类型(PRIMARY KEY)。

基本用法:
格式:foreign key(表A的字段名) references 表B(字段名)
on update cascade on delete cascade #参照表为B,即从B表字段的值中的范围内选择。

例:
提示:被参照字段必须要是主键类型(PRIMARY KEY)。
mysql>create table  ku.abc4(
>id  int(4),
>name char(5),
>foreign key(name),
>references  abc3(name),
>on update  cascade
>on  delete cascade
>engine=innodb
>);

删除外键字段
格式:alter table 表名 drop foreign key 约束名;

例:
mysql>show create table  ku.abc4\G;
...
CONSTRAINT `xxx`    #`xxx`里面是约束名
.....


mysql>alter table ku.abc4 drop foreigen key xxx ;






本文转自夜流璃雨 51CTO博客,原文链接:http://blog.51cto.com/13399294/2065893,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
Mysql的索引
MYSQL索引主要有 : 单列索引 , 组合索引和空间索引 , 用的比较多的就是单列索引和组合索引 , 空间索引我这边没有用到过 单列索引 : 在MYSQL数据库表的某一列上面创建的索引叫单列索引 , 单列索引又分为 ● 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。 ● 唯一索引:索引列中的值必须是唯一的,但是允许为空值 ● 主键索引:是一种特殊的唯一索引,不允许有空值 ● 全文索引: 只有在MyISAM引擎、InnoDB(5.6以后)上才能使⽤用,而且只能在CHAR,VARCHAR,TEXT类型字段上使⽤用全⽂文索引。
|
3月前
|
存储 缓存 关系型数据库
MySQL底层概述—9.ACID与事务
本文介绍了数据库事务的ACID特性(原子性、一致性、隔离性、持久性),以及事务控制的演进过程,包括排队、排它锁、读写锁和MVCC(多版本并发控制)。文章详细解释了每个特性的含义及其在MySQL中的实现方式,并探讨了事务隔离级别的类型及其实现机制。重点内容包括:ACID特性(原子性、持久性、隔离性和一致性的定义及其实现方式)、事务控制演进(从简单的全局排队到复杂的MVCC,逐步提升并发性能)、MVCC机制(通过undo log多版本链和Read View实现高效并发控制)、事务隔离级别(析了四种隔离级别(读未提交、读已提交、可重复读、可串行化)的特点及适用场景)、隔离级别与锁的关系。
|
3月前
|
存储 SQL 关系型数据库
MySQL底层概述—2.InnoDB磁盘结构
InnoDB磁盘结构主要包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Double Write Buffer)、重做日志(redo log)和撤销日志(undo log)。其中,表空间分为系统、独立、通用、Undo及临时表空间,分别用于存储不同类型的数据。数据字典从MySQL 8.0起不再依赖.frm文件,转而使用InnoDB引擎存储,支持事务原子性DDL操作。
311 100
MySQL底层概述—2.InnoDB磁盘结构
|
3月前
|
缓存 算法 关系型数据库
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
335 97
MySQL底层概述—1.InnoDB内存结构
|
22天前
|
SQL 存储 关系型数据库
MySQL选错索引了怎么办?
本文探讨了MySQL中因索引选择不当导致查询性能下降的问题。通过创建包含10万行数据的表并插入数据,分析了一条简单SQL语句在不同场景下的执行情况。实验表明,当数据频繁更新时,MySQL可能因统计信息不准确而选错索引,导致全表扫描。文章深入解析了优化器判断扫描行数的机制,指出基数统计误差是主要原因,并提供了通过`analyze table`重新统计索引信息的解决方法。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
192 24
MySQL底层概述—10.InnoDB锁机制
|
3月前
|
缓存 算法 关系型数据库
MySQL底层概述—8.JOIN排序索引优化
本文主要介绍了MySQL中几种关键的优化技术和概念,包括Join算法原理、IN和EXISTS函数的使用场景、索引排序与额外排序(Using filesort)的区别及优化方法、以及单表和多表查询的索引优化策略。
181 22
MySQL底层概述—8.JOIN排序索引优化
|
2月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL底层概述—7.优化原则及慢查询
本文主要介绍了:Explain概述、Explain详解、索引优化数据准备、索引优化原则详解、慢查询设置与测试、慢查询SQL优化思路
186 15
MySQL底层概述—7.优化原则及慢查询
|
3月前
|
存储 关系型数据库 MySQL
MySQL底层概述—6.索引原理
本文详细回顾了:索引原理、二叉查找树、平衡二叉树(AVL树)、红黑树、B-Tree、B+Tree、Hash索引、聚簇索引与非聚簇索引。
150 11
MySQL底层概述—6.索引原理