MySQL索引特性(三 )

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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子句中的字段不应该创建索引
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
2月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
87 4
|
4月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
6月前
|
关系型数据库 MySQL 数据库
Mysql的索引
MYSQL索引主要有 : 单列索引 , 组合索引和空间索引 , 用的比较多的就是单列索引和组合索引 , 空间索引我这边没有用到过 单列索引 : 在MYSQL数据库表的某一列上面创建的索引叫单列索引 , 单列索引又分为 ● 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。 ● 唯一索引:索引列中的值必须是唯一的,但是允许为空值 ● 主键索引:是一种特殊的唯一索引,不允许有空值 ● 全文索引: 只有在MyISAM引擎、InnoDB(5.6以后)上才能使⽤用,而且只能在CHAR,VARCHAR,TEXT类型字段上使⽤用全⽂文索引。
|
2月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
3月前
|
存储 关系型数据库 MySQL
MySQL覆盖索引解释
总之,覆盖索引就像是图书馆中那些使得搜索变得极为迅速和简单的工具,一旦正确使用,就会让你的数据库查询飞快而轻便。让数据检索就像是读者在图书目录中以最快速度找到所需信息一样简便。这样的效率和速度,让覆盖索引成为数据库优化师傅们手中的尚方宝剑,既能够提升性能,又能够保持系统的整洁高效。
107 9
|
4月前
|
机器学习/深度学习 关系型数据库 MySQL
对比MySQL全文索引与常规索引的互异性
现在,你或许明白了这两种索引的差异,但任何技术决策都不应仅仅基于理论之上。你可以创建你的数据库实验环境,尝试不同类型的索引,看看它们如何影响性能,感受它们真实的力量。只有这样,你才能熟悉它们,掌握什么时候使用全文索引,什么时候使用常规索引,以适应复杂多变的业务需求。
101 12
|
8月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
573 81
|
5月前
|
SQL 存储 关系型数据库
MySQL选错索引了怎么办?
本文探讨了MySQL中因索引选择不当导致查询性能下降的问题。通过创建包含10万行数据的表并插入数据,分析了一条简单SQL语句在不同场景下的执行情况。实验表明,当数据频繁更新时,MySQL可能因统计信息不准确而选错索引,导致全表扫描。文章深入解析了优化器判断扫描行数的机制,指出基数统计误差是主要原因,并提供了通过`analyze table`重新统计索引信息的解决方法。
133 3
|
6月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。

推荐镜像

更多