MySQL查询性能优化——索引分类(二)

这篇具有很好参考价值的文章主要介绍了MySQL查询性能优化——索引分类(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、索引分类

  1.按存储引擎存储形式分类  

  1.1聚集索引

   1.1.1聚集索引结构

  1.2 二级索引

 1.2.1二级索引结构

2.按数据库分类

 2.1 主键索引 

 2.2 唯一索引

 2.3 常规索引

 2.4 联合索引

 2.5 全文索引


上一期说到索引的原理其实就是B+树,这期我们来聊一下索引的分类。

一、索引分类

  1.按存储引擎存储形式分类  

   按存储引擎存储形式可以分为聚集索引二级索引,这两种索引也是索引的两大类。

  1.1聚集索引

  将数据与索引存储到一块,索引结构的叶子节点存储行数据。聚集索引有且只能有一个,我们常说的主键就是聚集索引。

  聚集索引的选取规则:

  1. 如果存在主键,那么主键就是聚集索引。

  2. 如果主键不存在,那么第一个唯一索引将作为聚集索引。

  3. 如果没有唯一索引,存储引擎Innodb将自动生成一个rowid作为隐藏的聚集索引。

   1.1.1聚集索引结构

   可以看到叶子节点下分别都挂载了行数据,这就是我们在上面所说的索引与数据存储到一起,如下图所示:

MySQL查询性能优化——索引分类(二),mysql,性能优化,数据库,数据结构,b+树

   执行一条语句,来看下查找的过程是怎么样的:

 select * from user where id='12'; 

MySQL查询性能优化——索引分类(二),mysql,性能优化,数据库,数据结构,b+树

  通过聚集索引,可以快速找到行数据。

  1.2 二级索引

   将数据与索引分开存储,索引结构的叶子节点存储的是对应的主键。

   除了主键索引,其他都是二级索引,二级索引可以有多个。

   下面通过两张图来了解聚集索引和二级索引是如何存储行数据和主键:

MySQL查询性能优化——索引分类(二),mysql,性能优化,数据库,数据结构,b+树

  在最左边我们可以看到有三列数据,假设这张表为user,对应的字段分别为id,name,gender,id作为主键,name字段添加了二级索引,我们先来看最上面的聚集索引:

 1.2.1二级索引结构

  索引结构的叶子节点存储的是对应的主键,如下图所示:

MySQL查询性能优化——索引分类(二),mysql,性能优化,数据库,数据结构,b+树

  当通过name作为条件去检索数据时:

select * from user where name='Arm';

  查询过程如下:

MySQL查询性能优化——索引分类(二),mysql,性能优化,数据库,数据结构,b+树

  1. 第一步,通过Arm去检索,Arm首先Lee进行对比,A小于L,往左走。

  2. 第二步,Arm再和Geek对比,A小于G,继续往左走。

  3. 第三步,Arm等于Arm,再通过Arm下挂载的主键(10)去聚集索引下找。

  4. 最后找到主键10,主键10下挂载着对应的行数据。

这就是通过二级索引去检索的过程,相比于主键索引,二级索引的检索出现了回表。

那么什么是回表呢?

回表就是通过二级索引找到主键值,再通过主键值找到行数据。

从上图可以看出,二级索引的检索效率会低于主键索引,那么如何解决回表的问题呢?我们在下期二级索引的使用中会说到。

2.按数据库分类

  按照数据库可以分为主键索引、唯一索引、常规索引、联合索引、全文索引。

  除了主键索引为第1点所说的聚集索引,其他均为二级索引。

 2.1 主键索引 

  即聚集索引。主键索引有且只有一个,关键字primary,主键索引是查询效率最高的索引。

创建语法:

create primary index on table_name(column);

 2.2 唯一索引

  唯一索引可以避免字段值不重复,可以有多个,关键字unique。

  创建语法:

create unique index on table_name(column);

 2.3 常规索引

  我们常定义的索引只要不加上某个关键字都是常规索引。

  创建语法:

create index on table_name(column);

 2.4 联合索引

  一个索引创建在多个列上。

  创建语法:

create index on table_name(column1,column2);

 2.5 全文索引

  全文索引检索的是文本中的关键字,而不是比较值,常用于海量数据的模糊查询。

  创建语法:

create fulltext index on table_name(column1,column2);

 全文索引的使用语法和其他不一样,如上给column1,column2创建了全文索引。

 使用方法:

select * from tale_name where match(column1,column2) against('值1','值2');

match()函数指定的列和创建全文索引的列要完全匹配,否则会报错,against匹配的为要查询的值

  总结:

  1. 按存储形式可将索引分为聚集索引和二级索引,聚集索引和二级索引的结构及查询的过程。

  2. 二级索引产生回表的问题.

  3. 按数据库分类的5种索引及创建语法。

    这一期索引分类、索引的存储结构分享到这里,我们下一期来聊索引的使用及如何解决回表的问题,下期见!

   公众号:【积极向上的阿虫】文章来源地址https://www.toymoban.com/news/detail-815786.html

到了这里,关于MySQL查询性能优化——索引分类(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MySQL索引:让你的数据库查询快到起飞!

    MySQL索引:让你的数据库查询快到起飞!

    💕世界上最美好的东西之一,就是你每天都有机会开始全新的一天。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章主要内容:详细介绍如何查看、创建和删除MySQL索引,以及MySQL索引的底层原理:B+树。🚗 各位朋友们,大家好!前面我们已经介绍了MySQL的库

    2024年02月09日
    浏览(10)
  • 【MySQL索引与优化篇】数据库的设计规范

    【MySQL索引与优化篇】数据库的设计规范

    在关系型数据库中,关于数据表设计的基本原则、规则就称为范式 。范式的英文名称是 Normal Form ,简称 NF 。它是英国人 E.F.Codd 在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的 规则 和 指导方

    2024年02月05日
    浏览(19)
  • 深入解析MySQL视图、索引、数据导入导出:优化查询和提高效率

    深入解析MySQL视图、索引、数据导入导出:优化查询和提高效率

    目录 1. 视图(View): 什么是视图? 为什么要使用视图? 视图的优缺点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 示例操作 没使用前 使用后 2. 索引(Index): 什么是索引? 为什么要使用索引?

    2024年02月13日
    浏览(14)
  • MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

    MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

    本篇博客深入详细地介绍了数据库索引的概念和重要性。内容包含:索引的概念和目标、索引的优点与缺点。此外,博客还深入解析了三种主要的索引结构:B-Tree、B+Tree和Hash,提供了详细的结构解析和优化方法,并通过插图进一步增强了理解。 博客的部分内容专注于对B-Tr

    2024年02月21日
    浏览(40)
  • MySQL数据库性能优化技巧介绍

    MySQL数据库性能优化技巧介绍

    MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率,提升系统性能。 对于MySQL,最简单

    2024年02月08日
    浏览(19)
  • MySQL数据库进行性能优化的思路

    对MySQL数据库进行性能优化的思路可以涵盖以下方面: 索引优化: 索引是提高查询性能的关键。确保表中的关键列和经常用于查询条件的列都被适当地创建了索引。可以使用 CREATE INDEX 语句添加索引,或者使用 ALTER TABLE 语句在已有表上添加索引。例如,对于一个用户表中的

    2024年02月06日
    浏览(11)
  • 数据库——MySQL高性能优化规范

    所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留(如果表名中包含查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符 临时库表必须以 tmp_为前缀并以日期为后缀,

    2024年02月11日
    浏览(24)
  • 【MySQL索引与优化篇】数据库设计实操(含ER模型)

    【MySQL索引与优化篇】数据库设计实操(含ER模型)

    1.1 概述 ER 模型中有三个要素,分别是 实体、属性和关系 实体 ,可以看做是数据对象,往往对应于现实生活中的真实存在的个体。在 ER 模型中,用 矩形 来表示。实体分为两类,分别是 强实体 和 弱实体 。强实体是指不依赖于其他实体的实体;弱实体是指对另一个实体有很

    2024年02月06日
    浏览(9)
  • MySQL数据库内存配置与性能优化:合理分配内存,提升数据库性能

    MySQL数据库内存配置与性能优化:合理分配内存,提升数据库性能

             引言 :MySQL是广泛使用的关系型数据库管理系统,而合理配置数据库的内存是保障其高性能运行的关键之一.本文将介绍如何根据MySQL数据库内存值大小来定义,以及这样配置如何影响数据库的性能   内存配置的基本原则 : innodb_buffer_pool_size :该参数定义了InnoDB存储引擎

    2024年02月22日
    浏览(12)
  • MySQL——性能优化与关系型数据库

    MySQL——性能优化与关系型数据库

    吞吐与延迟:有些结论是反直觉的,指导我们关注什么。 没有量化就没有改进:监控与度量指标,指导我们怎么去入手。 80/20原则:先优化性能瓶颈问题,指导我们如何去优化。 过早的优化是万恶之源:指导我们要选择优化的时机。 脱离场景谈性能都是耍流氓:指导我们对

    2024年02月01日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包