MySQL索引特性(三 )

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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子句中的字段不应该创建索引
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
221 9
|
21天前
|
SQL 存储 关系型数据库
MySQL秘籍之索引与查询优化实战指南
最左前缀原则。不冗余原则。最大选择性原则。所谓前缀索引,说白了就是对文本的前几个字符建立索引(具体是几个字符在建立索引时去指定),比如以产品名称的前 10 位来建索引,这样建立起来的索引更小,查询效率更快!
88 22
 MySQL秘籍之索引与查询优化实战指南
|
1天前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
|
4天前
|
存储 关系型数据库 MySQL
浅入浅出——MySQL索引
本文介绍了数据库索引的概念和各种索引结构,如哈希表、B+树、InnoDB引擎的索引运作原理等。还分享了覆盖索引、联合索引、最左前缀原则等优化技巧,以及如何避免索引误用,提高数据库性能。
|
30天前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
22天前
|
存储 关系型数据库 MySQL
MySQL中为什么要使用索引合并(Index Merge)?
通过这些内容的详细介绍和实际案例分析,希望能帮助您深入理解索引合并及其在MySQL中的
84 10
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
82 18
|
1月前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
63 8
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
86 7
|
1月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
108 5