MySQL索引特性(三 )

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL索引特性

四、索引操作

4.1 创建主键索引

方式一


创建表时,直接在对应的字段名后指定primary key


92ac47ef15024070896a41d2550f2007.png


方式二


在创建表的最后,指定某列或某几列为主键索引


f5087807edd04b60a62aefb88d3fa3bb.png


方式三


创建表后,使用alter指令给指定字段添加主键索引


98006e35e35c43febd45227a028e6b5c.png


4.2 创建唯一索引

方式一


在创建表时,直接在对应的字段名后指定unique


d32b02df8d90426f926ae02676a8794f.png


方式二


在创建表的最后,指定某列或某几列为唯一索引


5a03aa0109ad46f7a7bd1a6b247ea229.png


方式三


创建表后,使用alter命令给指定字段添加唯一索引


c4d49f495164448c97a715e02d7d3a34.png


4.3 创建普通索引

方式一


在创建表的最后,指定某列或某几列为普通索引


b71b734960164c79b74aedd404801651.png


方式二


创建表后,使用alter命令给指定字段添加普通索引

101e1fdb5ea244aa8bef48e90df29262.png



方式三


创建表后,使用create命令给指定字段创建普通索引,并指定索引名


a41a0c3ac8c745e78f89f727a18569e6.png


4.4 创建全文索引

全文索引比较常见的案例就是对文章中的词进行搜索,如下面创建一个文章表,表中包含文章的id、文章名称、文章内容,并在创建表的最后通过fulltext给title和body列创建全文索引


e14ea5c2dba9421e8df5d33d35184731.png


向表中插入一些测试数据


8e270ac75bf84d318870ebd3bc4bf0c8.png


若要查询哪些文章中包含database关键字,可通过模糊匹配进行查找


3ffcddac51d940679188d262bde7d05e.png


但这种查找方式并没有用到全文索引,在SQL语句前加上explain,看到key对应的值为NULL,表示这条SQL在执行过程中没有用到任何索引


b2d4dbb736ca469ea65525370857a4e1.png


若要通过全文索引查询,需使用match against进行搜索。这条SQL语句前面加上explain,可以看到key对应的值为title,表示这条SQL在执行过程中用到了索引名为title的索引


5232991989f64afbbe9d386ae4f2be9d.png


注意:


MyISAM存储引擎支持全文索引,而InnoDB存储引擎是在5.6以后才开始支持全文索引

同时使用title和body建立全文索引时,相当于建立了一个复合索引,默认会选择fulltext中的第一个列名作为这个复合索引的索引名,所以这里explain中key对应的索引名为title

由于是title和body共同建立的全文索引,所以若文章中没有出现关键字,但文章名称中出现了关键字则也会被筛选出来(当前示例没有体现出来)

4.5 查询索引

方式一


使用show keys from 表名查询,比如查询articles表中的索引信息



ca3cae56fae5422791979afe978371db.png

Table:表示创建索引的表的名称

Non_unique:表示该索引是否是唯一索引,若是则为0,若不是则为1

Key_name:表示索引的名称

Seq_in_index:表示该列在索引中的位置。若索引是单列的,则该列的值为1,若索引是复合索引,则该列的值为该列在索引定义中的顺序

Column_name:表示定义索引的列字段

Collation:表示列以何种顺序存储在索引中,"A"表示升序,NULL表示无分类

Cardinality:索引中唯一值数目的估计值。基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大

Sub_part:表示列中被编入索引的字符的数量,若列只是部分被编入索引,则该列的值为被编入索引的字符的数目,若整列被编入索引,则该列的值为NULL

Packed:指示关键字如何被压缩。若没有被压缩,则值为NULL

Null:用于显示索引列中是否包含NULL,若包含则为YES,若不包含则为NO

Index_type:显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE)

Comment:显示评注

方式二


使用show iindex from 表名查询,比如查询articles表中的索引信息


7e67bd2ee8e9405db1960d1e708bbf26.png


方式三


使用desc 表名查询(信息较为简略)


cfbc17a3078b49f4ba67765d3deb366d.png


4.6 删除索引

创建测试表


创建一个用户表用于测试索引的删除,表中包含用户的id、姓名和邮箱,并将这三列分别设置为主键索引、唯一索引和普通索引


ce752ca3f5944e53a94bd1b72d686c40.png


删除主键索引


alter table 表名 drop primary key

70e60312f7074ddea6b72b7e91f8517e.png


删除非主键索引

alter table 表名 drop index 索引名

236b3b08b0804708a902a979a55f386e.png

drop index 索引名 on 表名


aa1ea2435bcd4f1b80091ff210f27f5a.png

注意:一个表只有一个主键索引,所以在删除主键索引时不用指明索引名,而一个表中可能有多个非主键索引,所以在删除非主键索引时需要指明索引名


4.7 索引创建原则

索引创建的原则如下:


  • 比较频繁作为查询条件的字段应该创建索引
  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  • 更新非常频繁的字段不适合创建索引
  • 不会出现在where子句中的字段不应该创建索引
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
24 2
|
4天前
|
SQL 存储 关系型数据库
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(下)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
22 2
|
4天前
|
SQL 关系型数据库 MySQL
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(上)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
20 2
|
4天前
|
NoSQL 关系型数据库 MySQL
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
21 2
|
4天前
|
存储 算法 关系型数据库
MySQL索引详解
MySQL索引详解
15 0
|
4天前
|
存储 SQL 关系型数据库
完蛋!😱 我被MySQL索引失效包围了!
完蛋!😱 我被MySQL索引失效包围了!
|
4天前
|
SQL 存储 关系型数据库
MySQL的3种索引合并优化⭐️or到底能不能用索引?
MySQL的3种索引合并优化⭐️or到底能不能用索引?
|
4天前
|
存储 SQL 关系型数据库
MySQL索引,看这一篇就够了!
MySQL索引,看这一篇就够了!
|
4天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
13 0
|
4天前
|
存储 SQL 关系型数据库
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
27 0

推荐镜像

更多